home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 3 No 083 < prev    next >
Text File  |  1995-02-14  |  120KB  |  3,132 lines

  1. C.S.M.P. Digest             Mon, 13 Feb 95       Volume 3 : Issue 83
  2.  
  3. Today's Topics:
  4.  
  5.         (silly?) Question about "Print" apple event
  6.         A "better" Random()
  7.         Any speedup tips for this?
  8.         Getting an event outside of the Main Loop
  9.         Help a dumb father help his son with Mac programming
  10.         How can I tell if a driver (eg MacTCP) is open
  11.         Quality of Random()
  12.         Tip Of the Month: Transparent PICTs
  13.         True RANDOM numbers, (was Re: Quality of Random())
  14.  
  15.  
  16.  
  17. The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
  18. (pottier@clipper.ens.fr).
  19.  
  20. The digest is a collection of article threads from the internet newsgroup
  21. comp.sys.mac.programmer.  It is designed for people who read c.s.m.p. semi-
  22. regularly and want an archive of the discussions.  If you don't know what a
  23. newsgroup is, you probably don't have access to it.  Ask your systems
  24. administrator(s) for details.  If you don't have access to news, you may
  25. still be able to post messages to the group by using a mail server like
  26. anon.penet.fi (mail help@anon.penet.fi for more information).
  27.  
  28. Each issue of the digest contains one or more sets of articles (called
  29. threads), with each set corresponding to a 'discussion' of a particular
  30. subject.  The articles are not edited; all articles included in this digest
  31. are in their original posted form (as received by our news server at
  32. nef.ens.fr).  Article threads are not added to the digest until the last
  33. article added to the thread is at least two weeks old (this is to ensure that
  34. the thread is dead before adding it to the digest).  Article threads that
  35. consist of only one message are generally not included in the digest.
  36.  
  37. The digest is officially distributed by two means, by email and ftp.
  38.  
  39. If you want to receive the digest by mail, send email to listserv@ens.fr
  40. with no subject and one of the following commands as body:
  41.     help                                Sends you a summary of commands
  42.     subscribe csmp-digest Your Name     Adds you to the mailing list
  43.     signoff csmp-digest                 Removes you from the list
  44. Once you have subscribed, you will automatically receive each new
  45. issue as it is created.
  46.  
  47. The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
  48. Questions related to the ftp site should be directed to
  49. scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
  50. digest are available there.
  51.  
  52. Also, the digests are available to WAIS users.  To search back issues
  53. with WAIS, use comp.sys.mac.programmer.src. With Mosaic, use
  54. http://www.wais.com/wais-dbs/comp.sys.mac.programmer.html.
  55.  
  56.  
  57. -------------------------------------------------------
  58.  
  59. >From dms1070@hertz.njit.edu (David Shaw)
  60. Subject: (silly?) Question about "Print" apple event
  61. Date: Sun, 22 Jan 1995 15:21:41 GMT
  62. Organization: New Jersey Institute of Technology, Newark, N.J.
  63.  
  64. I am sure this question has come up time and again, but what are you 
  65. supposed to do to implement the _required_ four Apple Events, when one or 
  66. more of them really doesn't apply to your application?  For instance, I am 
  67. working on a text filtering program which has no print function, and so 
  68. the print event makes very little sense.  Should I just not provide a 
  69. handler for it (which seems to contravene the idea of the four _required_ 
  70. functions), provide a handler that does nothing (i.e. just returns with 
  71. no error), or perhaps return an EventNotHandled?
  72.  
  73. David
  74.  
  75. -- 
  76.   David Shaw | dms1070@hertz.njit.edu | WWW http://hertz.njit.edu/~dms1070
  77. +--------------------------------------------------------------------------+
  78.   "There are two major products that come out of Berkeley: LSD and UNIX.
  79.      We don't believe this to be a coincidence." - Jeremy S. Anderson
  80.  
  81. +++++++++++++++++++++++++++
  82.  
  83. >From "Andrew C. Plotkin" <ap1i+@andrew.cmu.edu>
  84. Date: Sun, 22 Jan 1995 14:01:18 -0500
  85. Organization: Information Technology Center, Carnegie Mellon, Pittsburgh, PA
  86.  
  87. Excerpts from netnews.comp.sys.mac.programmer.help: 22-Jan-95 (silly?)
  88. Question about "Pr.. David Shaw@hertz.njit.ed (869)
  89.  
  90. > I am sure this question has come up time and again, but what are you 
  91. > supposed to do to implement the _required_ four Apple Events, when one or 
  92. > more of them really doesn't apply to your application?  For instance, I am 
  93. > working on a text filtering program which has no print function, and so 
  94. > the print event makes very little sense.  Should I just not provide a 
  95. > handler for it (which seems to contravene the idea of the four _required_ 
  96. > functions), provide a handler that does nothing (i.e. just returns with 
  97. > no error), or perhaps return an EventNotHandled?
  98.  
  99. If the application never generates any files (of its creator), then it
  100. should never receive a Print event. In that case, I would have a handler
  101. that puts up an error dialog ("This program cannot print anything, and
  102. how the hell did you get here, anyway?")
  103.  
  104. --Z
  105.  
  106. "And Aholibamah bare Jeush, and Jaalam, and Korah: these were the borogoves..."
  107.  
  108. +++++++++++++++++++++++++++
  109.  
  110. >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
  111. Date: Mon, 23 Jan 1995 17:18:11 +1300
  112. Organization: University of Waikato
  113.  
  114. In article <gj8ehy600gpIEulo8x@andrew.cmu.edu>, "Andrew C. Plotkin"
  115. <ap1i+@andrew.cmu.edu> wrote:
  116.  
  117. >If the application never generates any files (of its creator), then it
  118. >should never receive a Print event. In that case, I would have a handler
  119. >that puts up an error dialog ("This program cannot print anything, and
  120. >how the hell did you get here, anyway?")
  121.  
  122. You can get there via AppleScript:
  123.  
  124.     tell application "Duh" to print file "SomebodyElsesDoc"
  125.  
  126. +++++++++++++++++++++++++++
  127.  
  128. >From jwbaxter@olympus.net (John W. Baxter)
  129. Date: Sun, 22 Jan 1995 19:24:41 -0800
  130. Organization: Internet for the Olympic Peninsula
  131.  
  132. In article <1995Jan22.152141.25516@njitgw.njit.edu>,
  133. dms1070@hertz.njit.edu (David Shaw) wrote:
  134.  
  135. > I am sure this question has come up time and again, but what are you 
  136. > supposed to do to implement the _required_ four Apple Events, when one or 
  137. > more of them really doesn't apply to your application?  For instance, I am 
  138. > working on a text filtering program which has no print function, and so 
  139. > the print event makes very little sense.  Should I just not provide a 
  140. > handler for it (which seems to contravene the idea of the four _required_ 
  141. > functions), provide a handler that does nothing (i.e. just returns with 
  142. > no error), or perhaps return an EventNotHandled?
  143.  
  144. I return an errAEEventNotHandled (because I haven't handled it, for those
  145. I don't handle).  Finder doesn't seem to care...other apps may, and the
  146. errAEEventNotHandled gives some hypothetical system handler for the event
  147. a chance (if you're sure you DON'T want somebody's system handler to see
  148. the event, return noErr, I suppose).
  149.  
  150.    --John
  151.  
  152. -- 
  153. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  154.        Isn't C fun?
  155.    jwbaxter@pt.olympus.net
  156.  
  157. +++++++++++++++++++++++++++
  158.  
  159. >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
  160. Date: Mon, 23 Jan 1995 12:30:47 +1300
  161. Organization: University of Waikato
  162.  
  163. In article <1995Jan22.152141.25516@njitgw.njit.edu>,
  164. dms1070@hertz.njit.edu (David Shaw) wrote:
  165.  
  166. >I am sure this question has come up time and again, but what are you 
  167. >supposed to do to implement the _required_ four Apple Events, when one or 
  168. >more of them really doesn't apply to your application?  For instance, I am 
  169. >working on a text filtering program which has no print function, and so 
  170. >the print event makes very little sense.  Should I just not provide a 
  171. >handler for it (which seems to contravene the idea of the four _required_ 
  172. >functions), provide a handler that does nothing (i.e. just returns with 
  173. >no error), or perhaps return an EventNotHandled?
  174.  
  175. Those two choices are equivalent in terms of their behaviour to the user.
  176. If your application doesn't print, then don't provide a print handler. I
  177. have released several AppleEvent-aware applications that don't print, and
  178. this is what I do in all of them.
  179.  
  180. Lawrence D'Oliveiro                       fone: +64-7-856-2889
  181. Computer Services Dept                     fax: +64-7-838-4066
  182. University of Waikato            electric mail: ldo@waikato.ac.nz
  183. Hamilton, New Zealand    37^ 47' 26" S, 175^ 19' 7" E, GMT+13:00
  184. "So that's who Captain Bipto was. If only Lawrence had known..."
  185.  
  186. +++++++++++++++++++++++++++
  187.  
  188. >From davep@leonardo.lmt.com (Dave Polaschek)
  189. Date: Tue, 24 Jan 1995 09:35:51 -0600
  190. Organization: LaserMaster
  191.  
  192. In article <1995Jan22.152141.25516@njitgw.njit.edu>,
  193. dms1070@hertz.njit.edu (David Shaw) wrote:
  194. > ...
  195. > Should I just not provide a 
  196. > handler for it (which seems to contravene the idea of the four _required_ 
  197. > functions), provide a handler that does nothing (i.e. just returns with 
  198. > no error), or perhaps return an EventNotHandled?
  199.  
  200. Seems to me that returning EventNotHandled is the most accurate reply you
  201. can give. That's how I've dealt with this when I was faced with the same
  202. problem. Having no handler for the PDOC will probably make some scripting
  203. app mad at you in the future, so putting it in and just having it return
  204. EventNotHandled seems safest.
  205.  
  206. OTOH, in an app I have whose sole function is to print documents, sending
  207. an ODOC and a PDOC both end up in the same handler.
  208.  
  209. -DaveP
  210. -- 
  211. Dave Polaschek -- work:davep@county.lmt.com -- home:davep@eworld.com
  212. "Gentlemen! You can't fight in here. This is the War Room."
  213.                                                   -- Dr. Strangelove
  214.  
  215. +++++++++++++++++++++++++++
  216.  
  217. >From ldo@waikato.ac.nz (Lawrence D9Oliveiro)
  218. Date: Thu, 26 Jan 1995 17:15:13 +1300
  219. Organization: University of Waikato
  220.  
  221. In article <davep-2401950935510001@dp.lmt.com>, davep@leonardo.lmt.com
  222. (Dave Polaschek) wrote:
  223.  
  224. >In article <1995Jan22.152141.25516@njitgw.njit.edu>,
  225. >dms1070@hertz.njit.edu (David Shaw) wrote:
  226. >> ...
  227. >> Should I just not provide a 
  228. >> handler for it (which seems to contravene the idea of the four _required_ 
  229. >> functions), provide a handler that does nothing (i.e. just returns with 
  230. >> no error), or perhaps return an EventNotHandled?
  231. >
  232. >Seems to me that returning EventNotHandled is the most accurate reply you
  233. >can give. That's how I've dealt with this when I was faced with the same
  234. >problem. Having no handler for the PDOC will probably make some scripting
  235. >app mad at you in the future, so putting it in and just having it return
  236. >EventNotHandled seems safest.
  237.  
  238. But errAEEventNotHandled is the error you get when you don't specify a
  239. handler anyway. Thus, as far as any client application can tell, having no
  240. handler, as opposed to having a handler that does nothing and returns that
  241. error, is the same thing.
  242.  
  243. +++++++++++++++++++++++++++
  244.  
  245. >From jwbaxter@olympus.net (John W. Baxter)
  246. Date: Sat, 28 Jan 1995 15:01:11 -0800
  247. Organization: Internet for the Olympic Peninsula
  248.  
  249. In article <ldo-2601951715130001@130.217.96.144>, ldo@waikato.ac.nz
  250. (Lawrence D9Oliveiro) wrote:
  251.  
  252. > In article <davep-2401950935510001@dp.lmt.com>, davep@leonardo.lmt.com
  253. > (Dave Polaschek) wrote:
  254. > >In article <1995Jan22.152141.25516@njitgw.njit.edu>,
  255. > >dms1070@hertz.njit.edu (David Shaw) wrote:
  256. ...
  257. > But errAEEventNotHandled is the error you get when you don't specify a
  258. > handler anyway. Thus, as far as any client application can tell, having no
  259. > handler, as opposed to having a handler that does nothing and returns that
  260. > error, is the same thing.
  261.  
  262. As long as there isn't a '****'/'****' or an 'aevt'/'****' handler lurking
  263. somewhere, not catching Print is the same as catching it and returning the
  264. error.  Doing the explict errEventNotHandled helps guard (I foolishly
  265. wrote "guards" first) against errant Scripting Additions, freeware, or
  266. whatever.
  267.  
  268.    --John
  269.  
  270. -- 
  271. John Baxter    Port Ludlow, WA, USA  [West shore, Puget Sound]
  272.        Isn't C fun?
  273.    jwbaxter@pt.olympus.net
  274.  
  275. ---------------------------
  276.  
  277. >From rmah@panix.com (Robert Mah)
  278. Subject: A "better" Random()
  279. Date: Sat, 28 Jan 1995 02:45:00 -0500
  280. Organization: One Step Beyond
  281.  
  282. mab@baretta.ideas.com (Aaron Barnett) wrote:
  283.  
  284. ) so has anyone come up with a better random function that they would 
  285. ) like to post?  Has anyone coded anything from a numerical recepies
  286. ) book?
  287.  
  288. OK, here is some code adapted from the book "Numerical Recepies in C"
  289. which was itself adapted from Knuth.  It uses the subtractive method
  290. instead of the linear congruential method that both Random() and rand()
  291. uses. 
  292.  
  293. It seems to have better of sequential coorelation (i.e. less) and thus
  294. has better k-space distribution.  It is much slower on 68K machines
  295. because it uses floating point.
  296.  
  297. Don't ask me for support unless you're willing to pay :-).  Besides,
  298. it's would be wiser to buy Numerical Recepies and Knuth instead --
  299. you'll learn more.
  300.  
  301. Cheers,
  302. Rob
  303. _______________________________________________________________________
  304. Robert S. Mah        Macintosh Software Development     +1 212 947 6507
  305. One Step Beyond         and Network Consulting           mah@panix.com
  306.  
  307.  
  308. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- CUT HERE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  309.  
  310. /*
  311.  * Use RandUniform() to get a random number between 0.0 and 1.0. 
  312.  * Use RandSeed() to re-initialize the random number sequence.
  313.  *
  314.  * WARNING: This is NOT a drop-in replacement for Random() or rand()
  315.  */
  316. float RandUniform( void );
  317. void RandSeed( short seed );
  318.  
  319.  
  320. /*
  321.  * Knuth says that you can use any really big MBIG and any really big
  322.  * MSEED as long as MSEED < MBIG
  323.  */
  324. #define MBIG    1000000000L
  325. #define MSEED   161803398L
  326. #define MZ      0L
  327. #define FAC     (1.0/MBIG)
  328.  
  329. static short    inext, inextp;
  330. static long     ma[56];
  331. static short    inited = 0;
  332.  
  333.  
  334. /*
  335.  * Returns a uniform random number between 0.0 and 1.0. Unlike Random()
  336.  * and rand(), this is not based on the linear congruential method, it
  337.  * uses the subtractive method instead.
  338.  */
  339. float RandUniform( void )
  340. {
  341.     long v;
  342.  
  343.     if( inited == false )       // Initialize everything
  344.         RandSeed( 0 );
  345.     
  346.     if( ++inext == 56 )         // Both indexes need to roll around when
  347.         inext = 1;              // they reach the end of the table.
  348.     if( ++inextp == 56 )
  349.         inextp = 1;
  350.     
  351.     v = ma[inext] - ma[inextp]; // Generate a new random # subtractively
  352.     if( v < MZ )                // Be sure its in the range
  353.         v += MBIG;
  354.  
  355.     ma[ inext ] = v;            // Store it.
  356.  
  357.     return v * FAC;
  358. }
  359.  
  360.  
  361. /*
  362.  * Initialize the random number sequence.  Set seed to any negative value
  363.  * to initialize or re-initize the sequence.
  364.  */
  365. void RandSeed( short seed )
  366. {
  367.     short i, ii, k;
  368.     long  mj, mk;
  369.  
  370.     if( seed > 0 )
  371.         seed = -seed;
  372.  
  373.     inited = true;
  374.     
  375.     mj = MSEED - (seed < 0 ? -seed : seed );
  376.     mj %= MBIG;
  377.     ma[55] = mj;
  378.     mk = 1;
  379.     
  380.     for( i = 1; i <= 54; i++ )
  381.     {
  382.         ii = ( 21 * i ) % 55;
  383.         ma[ii] = mk;
  384.         mk = mj - mk;
  385.         if( mk < MZ )
  386.             mk += MBIG;
  387.         mj = ma[ii];
  388.     }
  389.     
  390.     for( k = 1; k <= 4; k++ )
  391.     {
  392.         for( i = 1; i <= 55; i++ )
  393.         {
  394.             ma[i] -= ma[ 1 +(i+30) % 55 ];
  395.             if( ma[i] < MZ )
  396.                 ma[i] += MBIG;
  397.         }
  398.     }
  399.  
  400.     inext = 0;
  401.     inextp = 31;
  402. }
  403.  
  404. // eof
  405.  
  406. ---------------------------
  407.  
  408. >From vtourang@chat.carleton.ca (Vince Tourangeau)
  409. Subject: Any speedup tips for this?
  410. Date: Thu, 26 Jan 1995 20:47:04 GMT
  411. Organization: Carleton University
  412.  
  413.  
  414. I took the code for direct-to-screen writing from the Mac Programming
  415. FAQ, and sped it up as much as I could. However, I was wondering if
  416. there's anything I can do to speed it up some more. The following code
  417. is what I came up with; it's basically the code from the FAQ with most
  418. of the SetPixel stuff moved outside of the loop. This just turns the
  419. enitire screen black:
  420.  
  421. void init (void);
  422. void SetPixel ( int, int, unsigned long);
  423. GDHandle theGD ;
  424. char * theScreen ;
  425. long rowBytes ;
  426. short bitsPerPixel ;
  427. PixMapHandle pmh ;
  428. Boolean oldMode ;
  429. Boolean newMode;
  430.  
  431. void main (void)
  432. {
  433.         char *screen;
  434.         GrafPtr myPort;
  435.         int i,j;
  436.         Point thePoint;
  437.         init ();
  438.         
  439.         //screen = (qd.thePort)->portBits.baseAddr;     
  440.         
  441.         HideCursor ();
  442.         
  443.         theGD = GetMainDevice () ;
  444.         pmh = ( * theGD ) -> gdPMap ;
  445.         rowBytes = ( ( * pmh ) -> rowBytes ) & 0x3fff ;
  446.         theScreen = ( char * ) ( * pmh ) -> baseAddr ;
  447.         bitsPerPixel = ( * pmh ) -> pixelSize ;
  448.         oldMode = GetMMUMode ();
  449.         newMode = true32b;
  450.         SwapMMUMode ( & newMode ) ;
  451.         
  452.         for (i = 0; i < 640; i++) {
  453.                 for (j = 0; j < 480; j++) {
  454.                         SetPixel (i, j, 255); // sets all pixels to black
  455.                         }
  456.                 }
  457.         SwapMMUMode ( & oldMode ) ;
  458.         ShowCursor ();
  459. }
  460.  
  461.  
  462. void init (void) 
  463. {
  464.         Rect windowBounds;                      
  465.         WindowPtr myWindow;             
  466.         Rect theRect;
  467.         RGBColor aColor;
  468.         double PI;
  469.         int i;
  470.         
  471.         InitGraf(&qd.thePort);
  472.         InitFonts();
  473.         InitWindows();
  474.         InitMenus();
  475.         TEInit();
  476.         InitDialogs(nil);
  477.         InitCursor();
  478.  
  479.         SetRect (&windowBounds, 0, 0, 640, 480);
  480.         
  481.         myWindow = NewCWindow (nil, &windowBounds, "\p3-D Crap", true,
  482. documentProc, nil, false, 0);
  483.         SetPort (myWindow);
  484.         
  485. }
  486.  
  487. void SetPixel ( int h, int v , unsigned long value ) 
  488. {
  489.         theScreen [v*640+h ] = value ;
  490. }
  491.  
  492. The thing is, if I call PaintRect (&(*pmh)->bounds), it fills the
  493. screen faster than I can see; using the above code, you can see the
  494. pixels being written to the screen, even on my PowerMac 6100 (and yes,
  495. the code is native). What gives? Any tips on how to speed this up are
  496. much appreciated.
  497.         Vince
  498.  
  499. - --------------------------------------------------------------------
  500. Flaming Carrot: "Come here and look in the window!"
  501. Herbie: "GADZOOKS! Shakespeare is an AEROBICS INSTRUCTOR!!!"
  502.  
  503. Vince Tourangeau
  504. Carleton University
  505. vtourang@chat.carleton.ca
  506.  
  507. +++++++++++++++++++++++++++
  508.  
  509. >From Patrick.Stadelmann@etudiants.unine.ch (Patrick Stadelmann)
  510. Date: Fri, 27 Jan 1995 14:25:18 +0100
  511. Organization: University of Neuchatel
  512.  
  513. >         
  514. >         for (i = 0; i < 640; i++) {
  515. >                 for (j = 0; j < 480; j++) {
  516. >                         SetPixel (i, j, 255); // sets all pixels to black
  517. >                         }
  518. >                 }
  519.  
  520. With this, you generate 640*480 call to SetPixel. You'd better write :
  521.  
  522.           for (i = 0; i < 640; i++) {
  523.                   for (j = 0; j < 480; j++) {
  524.                          theScreen [i*640+j ] = 255;
  525.                           }
  526. Patrick
  527.  
  528. -- 
  529. Patrick Stadelmann <Patrick.Stadelmann@etudiants.unine.ch>
  530.  
  531. +++++++++++++++++++++++++++
  532.  
  533. >From vtourang@chat.carleton.ca (Vince Tourangeau)
  534. Date: Fri, 27 Jan 1995 16:12:50 GMT
  535. Organization: Carleton University
  536.  
  537. Patrick Stadelmann (Patrick.Stadelmann@etudiants.unine.ch) wrote:
  538. > >         
  539. > >         for (i = 0; i < 640; i++) {
  540. > >                 for (j = 0; j < 480; j++) {
  541. > >                         SetPixel (i, j, 255); // sets all pixels to black
  542. > >                         }
  543. > >                 }
  544.  
  545. > With this, you generate 640*480 call to SetPixel. You'd better write :
  546.  
  547. >           for (i = 0; i < 640; i++) {
  548. >                   for (j = 0; j < 480; j++) {
  549. >                          theScreen [i*640+j ] = 255;
  550. >                           }
  551. > Patrick
  552.  
  553. > -- 
  554. > Patrick Stadelmann <Patrick.Stadelmann@etudiants.unine.ch>
  555.  
  556. Thanks. I noticed this shortly after I posted the original message; I
  557. guess it was sort of "going against the grain" the way it was
  558. originally written. Still, I'd like to speed it uo another 2 to 4
  559. times... anyone know how to do this?
  560.         Vince
  561.  
  562.  
  563. - --------------------------------------------------------------------
  564. Flaming Carrot: "Come here and look in the window!"
  565. Herbie: "GADZOOKS! Shakespeare is an AEROBICS INSTRUCTOR!!!"
  566.  
  567. Vince Tourangeau
  568. Carleton University
  569. vtourang@chat.carleton.ca
  570.  
  571. +++++++++++++++++++++++++++
  572.  
  573. >From cdb@underdog.Stanford.EDU (Craig Becker)
  574. Date: 27 Jan 1995 18:39:57 GMT
  575. Organization: Stanford University: Computer Science Department, CA USA
  576.  
  577. In article <D32npF.Fst@cunews.carleton.ca>, vtourang@chat.carleton.ca (Vince Tourangeau) writes:
  578. |> 
  579. |> >           for (i = 0; i < 640; i++) {
  580. |> >                   for (j = 0; j < 480; j++) {
  581. |> >                          theScreen [i*640+j ] = 255;
  582. |> >                           }
  583. |> > Patrick
  584. |> 
  585. |> > -- 
  586. |> > Patrick Stadelmann <Patrick.Stadelmann@etudiants.unine.ch>
  587. |> 
  588. |> Thanks. I noticed this shortly after I posted the original message; I
  589. |> guess it was sort of "going against the grain" the way it was
  590. |> originally written. Still, I'd like to speed it uo another 2 to 4
  591. |> times... anyone know how to do this?
  592. |>      Vince
  593.  
  594. Well depending on how much optimization the compiler is doing, this
  595. could speed things up:
  596.  
  597.   l = 640 * 480;
  598.   for (i = 0; i < l; theScreen[i++] = 255);
  599.  
  600. This gets rid of the second loop counter and also the multiplication
  601. inside the loop. These could be "optimized away" anyhow, but it's
  602. worth trying. 
  603.  
  604. Another trick to try is treating the array as shorts or longs (instead
  605. of chars) to take advantage of the fact that the bus is more than 8 bits
  606. wide. So something like this:
  607.  
  608.   unsigned int *intScreen, *end;
  609.  
  610.   intScreen = (unsigned int *) theScreen;
  611.   end = intScreen + 640 * 480 / sizeof(unsigned int);
  612.   for (; intScreen < end; *(intScreen++) = ~0;
  613.  
  614. these have not been tried by me on a mac, but have been useful on
  615. other machines.
  616.  
  617. hope this helps,
  618.  
  619. craig
  620.  
  621. +++++++++++++++++++++++++++
  622.  
  623. >From andrewwelc@aol.com (AndrewWelc)
  624. Date: 28 Jan 1995 00:36:32 -0500
  625. Organization: America Online, Inc. (1-800-827-6364)
  626.  
  627. > With this, you generate 640*480 call to SetPixel. You'd better write :
  628. >           for (i = 0; i < 640; i++) {                   for (j = 0; j <
  629. > 480; j++) {                          theScreen [i*640+j ] = 255;        
  630.  
  631. >                  }
  632.  
  633. Even that will be extremely slow.  Try moving a longword at a time,
  634. unrolling the loops somewhat, precalculating the addresses, removing the
  635. multiplication, etc.
  636.  
  637. Regards,
  638.  
  639. Andrew Welch
  640. Ambrosia Software, Inc.
  641.  
  642. +++++++++++++++++++++++++++
  643.  
  644. >From Charles_R._Gray@acd.org (Charles R. Gray)
  645. Date: 27 Jan 1995 23:53:41 GMT
  646. Organization: Apple Corps of Dallas
  647.  
  648. vtourang@chat.carleton.ca (Vince Tourangeau) said:
  649. >> I took the code for direct-to-screen writing from the Mac Programming
  650. >> FAQ, and sped it up as much as I could. However, I was wondering if
  651. >> there's anything I can do to speed it up some more. The following code
  652. >> is what I came up with; it's basically the code from the FAQ with most
  653. >> of the SetPixel stuff moved outside of the loop. This just turns the
  654. >> enitire screen black:
  655. >> 
  656. >> void main (void)
  657. >> {
  658. >> // other code omitted for this message...
  659. >>      
  660. >>      for (i = 0; i < 640; i++) {
  661. >>              for (j = 0; j < 480; j++) {
  662. >>                      SetPixel (i, j, 255); // sets all pixels to black
  663. >>                      }
  664. >>              }
  665. >> // other code omitted for this message...
  666. >> }
  667. >> 
  668. >> void SetPixel ( int h, int v , unsigned long value ) 
  669. >> {
  670. >>      theScreen [v*640+h ] = value ;
  671. >> }
  672. >> 
  673.  
  674. Improvement #1:
  675. Avoid the overhead of the function call to SetPixel. You could define a
  676. macro,
  677. such as the following:
  678.      #define SETPIXEL(h,v,value)    theScreen [v*640+h ] = value
  679.  
  680. Improvement #2:
  681. The call to SetPixel has to perform a multiplication and an add to figure out
  682. the
  683. index into theScreen. If you look at your loops, you'll realize that you're
  684. stepping through consecutive locations in the array. All you need to do is
  685. perform an add at each step to get the next index.
  686. This original code:
  687. >>      for (i = 0; i < 640; i++) {
  688. >>              for (j = 0; j < 480; j++) {
  689. >>       theScreen [i*640+j ] = 255
  690. >>                      // Same as SetPixel (i, j, 255);
  691. >>                      }
  692. >>              }
  693. Could become the following code:
  694.     for (i=0; i< 640*480; i++)
  695.         theScreen[i]=255;
  696.  
  697.  
  698. __________________________________
  699.  
  700. Chuck_Gray@acd.org
  701.  
  702.  
  703. +++++++++++++++++++++++++++
  704.  
  705. >From vtourang@chat.carleton.ca (Vince Tourangeau)
  706. Date: Fri, 27 Jan 1995 21:47:22 GMT
  707. Organization: Carleton University
  708.  
  709. Craig Becker (cdb@underdog.Stanford.EDU) wrote:
  710. > Well depending on how much optimization the compiler is doing, this
  711. > could speed things up:
  712.  
  713. >   l = 640 * 480;
  714. >   for (i = 0; i < l; theScreen[i++] = 255);
  715.  
  716. > This gets rid of the second loop counter and also the multiplication
  717. > inside the loop. These could be "optimized away" anyhow, but it's
  718. > worth trying. 
  719.  
  720. > Another trick to try is treating the array as shorts or longs (instead
  721. > of chars) to take advantage of the fact that the bus is more than 8 bits
  722. > wide. So something like this:
  723.  
  724. >   unsigned int *intScreen, *end;
  725.  
  726. >   intScreen = (unsigned int *) theScreen;
  727. >   end = intScreen + 640 * 480 / sizeof(unsigned int);
  728. >   for (; intScreen < end; *(intScreen++) = ~0;
  729.  
  730. > these have not been tried by me on a mac, but have been useful on
  731. > other machines.
  732.  
  733. > hope this helps,
  734.  
  735. > craig
  736.  
  737.  
  738. I'll give it a shot. Thanks.
  739.         Vince
  740.  
  741. - --------------------------------------------------------------------
  742. Flaming Carrot: "Come here and look in the window!"
  743. Herbie: "GADZOOKS! Shakespeare is an AEROBICS INSTRUCTOR!!!"
  744.  
  745. Vince Tourangeau
  746. Carleton University
  747. vtourang@chat.carleton.ca
  748.  
  749. +++++++++++++++++++++++++++
  750.  
  751. >From grstate@undergrad.math.uwaterloo.ca (Gavriel State)
  752. Date: Mon, 30 Jan 1995 06:54:15 GMT
  753. Organization: University of Waterloo
  754.  
  755. In article <D315qG.F6C@cunews.carleton.ca>,
  756. Vince Tourangeau <vtourang@chat.carleton.ca> wrote:
  757. >       for (i = 0; i < 640; i++) {
  758. >               for (j = 0; j < 480; j++) {
  759. >                       SetPixel (i, j, 255); // sets all pixels to black
  760. >                       }
  761. >               }
  762.  
  763. The problem is twofold.  First off, you're only writing one pixel 
  764. at a time.  You've got at least 32-bits worth of video-bus bandwidth
  765. to use, and you're only using a quarter of it.
  766.  
  767. Secondly, your screen-clearing routine requires a *function call*
  768. to write each of those individual pixels.  That means you incur
  769. the penalty of pushing the function params, doing a subroutine
  770. call, doing stack setup and teardown, etc, *every* time you write a 
  771. pixel.  
  772.  
  773. A good way to get around the problem is to unroll your loops somewhat, 
  774. and try to be writing 32-bits at a time where you can.  You'll have
  775. to ensure that the data is aligned well before you use it, though.
  776.  
  777. Here's the code for my polygon span-filling routine.  It assumes a 
  778. few things, like the depth of the screen, but it adequately demonstrates
  779. how to align your data moves, does some loop unrolling, etc.  Thanks to
  780. Turly O'Connor for his help with the fall-through-switch concept.
  781.  
  782. Oh - all the setup for the MMU, cursor, etc. takes place in another 
  783. function.  
  784.  
  785. This is from my 3D renderer, which I'm really hoping to release 
  786. sometime soon.  Of course, if I keep this slackness up, maybe I can 
  787. release it at MacHack.....8-)
  788.  
  789. /* 8-bit specific right now, no Gouraud shading */
  790. void wrDrawSpan (wrUINT16 col, wrINT16 y, wrINT16 startX, wrINT16 endX,
  791.                                  wrUINT16 startShade, wrUINT16 endShade)
  792. {
  793.         wrUINT16                data;
  794.         wrUINT32                data4;                  
  795.         char                    *ptrPix;
  796.         wrUINT32                *ptrPix4;
  797.         wrINT16                 bytesToFill;
  798.         wrINT16                 longsToFill;
  799.         
  800.         bytesToFill = endX - startX;
  801.         if (endX < startX)
  802.                 return;
  803.         ptrPix = (*pixMapH)->baseAddr + startX;
  804.         ptrPix += y * rowBytes;                 
  805.         
  806.         /* For now, assume depth is 8 bits past this point */
  807.         data = wrGetColour8 (col, startShade, startX, y);
  808.         data4 = wrGetColour8_32 (col, startShade, startX, y);                   
  809.  
  810.         if (bytesToFill < 16)
  811.         {
  812.             switch (bytesToFill)                                /* Fall Thru Switch */
  813.             {                                                                   
  814.                 case 15: *ptrPix++ = data;              
  815.                 case 14: *ptrPix++ = data;              
  816.                 case 13: *ptrPix++ = data;              
  817.                 case 12: *ptrPix++ = data;              
  818.                 case 11: *ptrPix++ = data;              
  819.                 case 10: *ptrPix++ = data;              
  820.                 case  9: *ptrPix++ = data;              
  821.                 case  8: *ptrPix++ = data;              
  822.                 case  7: *ptrPix++ = data;              
  823.                 case  6: *ptrPix++ = data;              
  824.                 case  5: *ptrPix++ = data;              
  825.                 case  4: *ptrPix++ = data;              
  826.                 case  3: *ptrPix++ = data;              
  827.                 case  2: *ptrPix++ = data;              
  828.                 case  1: *ptrPix++ = data;
  829.             }
  830.         }
  831.         else
  832.         {
  833.                 /* Align the start pointer */
  834.                 switch ((wrUINT32)(ptrPix) & 3)     /* Fall Thru Switch */
  835.                 {                                                                       
  836.                         case 3: *ptrPix++ = data;
  837.                                         bytesToFill--;
  838.                         case 2: *ptrPix++ = data;
  839.                                         bytesToFill--;
  840.                         case 1: *ptrPix++ = data;
  841.                                         bytesToFill--;
  842.             }
  843.  
  844.             
  845.             /* Fill 64-bit words */
  846.             longsToFill = bytesToFill >> 3;
  847.             ptrPix4 = (wrUINT32 *)ptrPix;
  848.             while (longsToFill)
  849.             {
  850.                         *ptrPix4++ = data4; 
  851.                         *ptrPix4++ = data4;
  852.                         longsToFill--;
  853.             }
  854.             
  855.                 /* Do the end */
  856.                 ptrPix = (char *)ptrPix4;
  857.                 switch (bytesToFill & 7)                        /* Fall Thru Switch */
  858.                 {                                                                       
  859.                         case 7: *ptrPix++ = data;
  860.                         case 6: *ptrPix++ = data;
  861.                         case 5: *ptrPix++ = data;
  862.                         case 4: *ptrPix++ = data;
  863.                         case 3: *ptrPix++ = data;
  864.                         case 2: *ptrPix++ = data;
  865.                         case 1: *ptrPix++ = data;
  866.             }
  867.  
  868.         }
  869.         
  870. }
  871.  
  872.  
  873.  
  874.  
  875. --
  876.    Gavriel State | 4B Systems Design Engineering | Univ. of Waterloo
  877. - ---------------------------------------------------------------------
  878.      Ros:'Dark, isn't it?'                  Guild:'Not for night.'
  879.                 _Rosencrantz_and_Guildenstern_Are_Dead_
  880.  
  881. ---------------------------
  882.  
  883. >From dca1@cornell.edu (David Airey)
  884. Subject: Getting an event outside of the Main Loop
  885. Date: Thu, 26 Jan 1995 00:05:00 -0500
  886. Organization: Cornell University
  887.  
  888. I understand that Macintosh programs should really only have one main
  889. event loop. To my mind this poses a problem. What if you want to start a
  890. loop with one event and stop the loop when a second event occurs? Because
  891. the loop must continue to completion before the second event is seen, the
  892. loop will never stop. Yet I have seen many programs that manage this.
  893. Playing a movie with one button and stopping it with another. Halting a
  894. search that was taking too long. Stopping a chess program that is
  895. replaying a game. On and on. Yet I don't know how to do this. Send email
  896. to me if you know the answer.
  897.  
  898. +++++++++++++++++++++++++++
  899.  
  900. >From dstone@alchemy.chem.utoronto.ca (David Stone)
  901. Date: Thu, 26 Jan 1995 15:41:55 GMT
  902. Organization: University of Toronto Chemistry
  903.  
  904. In article <dca1-2601950005000001@comp6.psych.cornell.edu>,
  905. dca1@cornell.edu (David Airey) wrote:
  906. > I understand that Macintosh programs should really only have one main
  907. > event loop. To my mind this poses a problem. What if you want to start a
  908. > loop with one event and stop the loop when a second event occurs? Because
  909. > the loop must continue to completion before the second event is seen, the
  910. > loop will never stop. Yet I have seen many programs that manage this.
  911. > Playing a movie with one button and stopping it with another. Halting a
  912. > search that was taking too long. Stopping a chess program that is
  913. > replaying a game. On and on. Yet I don't know how to do this. Send email
  914. > to me if you know the answer.
  915.  
  916. I have an application that is used to collect real-time data over an
  917. IEEE-488 bus.  Timing is important and I didn't want to get hung up by
  918. anything else so I DID stick an event loop within the collection loop, 
  919. which in turn is launched by a mouse click in the main event loop.  At
  920. some point, I'll probably change all this to a Time Manager task.
  921.  
  922. Elsewhere in the app. I needed something similar, but in this case I wanted
  923. to make sure that updates, etc. as well as mouse and key events where
  924. registered.  So I set up a global "status" variable which lets me know
  925. what mode the user is currently running the program in, and then defined
  926. a sequence of app1Evt messages for different aspects of the interface.
  927. When a "loop process" is needed, I post the appropriate app1Evt message
  928. to start it, which flags the status variable.  Until the appropriate loop
  929. end condition (usually and "OK" or "Cancel" this keeps reposting the same
  930. event message.  When termination is reached, a "clear the status variable"
  931. event gets posted which then does whatever is needed at the end of the
  932. loop.
  933.  
  934. This sounds horrendously complicated, but it does work!  You have to see it
  935.  
  936. in action to appreciate it....
  937.  
  938. Dave Stone
  939.  
  940. +++++++++++++++++++++++++++
  941.  
  942. >From cokenias@rahul.net (Damon Cokenias)
  943. Date: Sat, 28 Jan 1995 22:56:59 -0800
  944. Organization: a2i network
  945.  
  946. In article <dca1-2601950005000001@comp6.psych.cornell.edu>,
  947. dca1@cornell.edu (David Airey) wrote:
  948.  
  949. > I understand that Macintosh programs should really only have one main
  950. > event loop. To my mind this poses a problem. What if you want to start a
  951. > loop with one event and stop the loop when a second event occurs? Because
  952. > the loop must continue to completion before the second event is seen, the
  953. > loop will never stop. Yet I have seen many programs that manage this.
  954. > Playing a movie with one button and stopping it with another. Halting a
  955. > search that was taking too long. Stopping a chess program that is
  956. > replaying a game. On and on. Yet I don't know how to do this. Send email
  957. > to me if you know the answer.
  958.  
  959. Here's how I have done it:
  960.  
  961. There is only one event loop (not a Macintosh requirement, but makes
  962. things much simpler to debug and maintain).  What happens in response to
  963. an event is determined by the frontmost window.
  964.  
  965. Imagine you have an application with two windows: one containing an
  966. animation, another that contains controls to pause/play the animation.  As
  967. well you have a menu that provides the play/pause feature.
  968.  
  969. When a key press is detected by the event loop the following occurs:
  970.  
  971. Is it a command-key combination?  If yes, go to menu handling, below.
  972. If it is not, determine which window (animation, contols) is frontmost. 
  973. Call either ControlWindowKeyPressed() or MovieWindowKeyPressed().
  974.  
  975. When a mouse click occurs:
  976.  
  977. Is the click in the menu bar?  If yes, determine which menu was selected. 
  978. Call ApplicationOpenDocument(), PauseMovie(), PlayMovie(),
  979. QuitApplication() etc as appropriate.
  980.  
  981. If not in the menu bar, is it in the drag area of a window? If yes, do
  982. appropriate dragging.  Same goes for resize and zoom areas.
  983.  
  984. If the click was in the content area, call MovieWindowClicked() or
  985. ControlWindowClicked() as appropriate.
  986.  
  987. Similar for update events: ask the appropriate window to do its thing.
  988.  
  989. *****
  990.  
  991. Doing things in this way leads to an elegant, object-oriented solution. 
  992. PowerPlant, TCL, MacApp and other frameworks do it this way.  Truly tricky
  993. people store tables of function pointers hanging off of window RefCons. 
  994. It only gets fancier from there.
  995.  
  996. Check out ftp.sumex-aim.stanford.edu (or a mirror site) for some good
  997. sample source.
  998.  
  999. -Damon Cokenias
  1000.  
  1001. +++++++++++++++++++++++++++
  1002.  
  1003. >From greg@math.harvard.edu (Gregory D. Landweber)
  1004. Date: Sun, 29 Jan 1995 03:27:52 -0500
  1005. Organization: Harvard University Department of Mathematics
  1006.  
  1007. > In article <dca1-2601950005000001@comp6.psych.cornell.edu>,
  1008. > dca1@cornell.edu (David Airey) wrote:
  1009. > > I understand that Macintosh programs should really only have one main
  1010. > > event loop. To my mind this poses a problem. What if you want to start a
  1011. > > loop with one event and stop the loop when a second event occurs? Because
  1012. > > the loop must continue to completion before the second event is seen, the
  1013. > > loop will never stop. Yet I have seen many programs that manage this.
  1014. > > Playing a movie with one button and stopping it with another. Halting a
  1015. > > search that was taking too long. Stopping a chess program that is
  1016. > > replaying a game. On and on. Yet I don't know how to do this. Send email
  1017. > > to me if you know the answer.
  1018.  
  1019. There are two ways to do this that I know of.
  1020.  
  1021. First, you can break the long task (the loop in your case) into smaller
  1022. chunks, and return to the main event loop after each chunk.  If there is
  1023. no event pending, then you go back to performing your task.  This requires
  1024. that you have a way of saving the current state of your task (such as the
  1025. index in your loop).
  1026.  
  1027. Secondly, you can use the Thread Manager.  This lets your program have
  1028. multiple concurrent threads running simultaneously.  Your main thread has
  1029. the event loop, but it spawns other threads to do things like the loop.
  1030. The loop thread and main thread could communicate via a global variable,
  1031. for instance.  That way, if the "stop" button is pushed, the program can
  1032. set a flag for the loop to stop.
  1033.  
  1034. I'm sure there are other more creative ways to do this.  Any ideas?
  1035.  
  1036. -- Greg Landweber
  1037.    greg@math.harvard.edu
  1038. (author of "Greg's Buttons" and "Greg's Browser")
  1039.  
  1040. +++++++++++++++++++++++++++
  1041.  
  1042. >From danparks@aol.com (DanParks)
  1043. Date: 29 Jan 1995 18:35:39 -0500
  1044. Organization: America Online, Inc. (1-800-827-6364)
  1045.  
  1046. In article <dca1-2601950005000001@comp6.psych.cornell.edu>,
  1047. dca1@cornell.edu (David Airey) wrote:
  1048. > I understand that Macintosh programs should really only have one main
  1049. > event loop. To my mind this poses a problem. What if you want to start a
  1050. > loop with one event and stop the loop when a second event occurs?
  1051. Because
  1052. > the loop must continue to completion before the second event is seen,
  1053. the
  1054. > loop will never stop. Yet I have seen many programs that manage this.
  1055. > Playing a movie with one button and stopping it with another. Halting a
  1056. > search that was taking too long. Stopping a chess program that is
  1057. > replaying a game. On and on. Yet I don't know how to do this. Send email
  1058. > to me if you know the answer.
  1059.  
  1060. [snip Damon Cokenias interesting message ]
  1061.  
  1062. David:
  1063.  
  1064. If it isn't obvious from the message posted by cokenias@rahul.net (Damon
  1065. Cokenias), you can call WaitNextEvent() more than one time in your
  1066. program. Below is a partial snippet that gives an idea of how this might
  1067. be done.
  1068.  
  1069. Regards,
  1070.  
  1071. Dan Sydow
  1072.  
  1073.  
  1074. void Main_Event_Loop( void )
  1075. {   
  1076.    EventRecord  theEvent;
  1077.  
  1078.   while ( All_Done == false ) 
  1079.    {
  1080.       WaitNextEvent( everyEvent, &theEvent, 15L, nil );
  1081.        
  1082.       switch (the_event.what) 
  1083.       {
  1084.          case mouseDown: 
  1085.             All_Done = true;
  1086.             break;
  1087.          case keyDown: 
  1088.             Do_Something();
  1089.             break;
  1090.       }
  1091.    }
  1092. }
  1093.  
  1094.  
  1095. void  Do_Something( void )
  1096. {
  1097.    long         i;
  1098.    EventRecord  evt;
  1099.    
  1100.    for ( i = 0; i < 10000; i++ )
  1101.    {
  1102.       // Do stuff here. This loop may take time, so give the user
  1103.       // the opportunity to break out of the loop at any time by
  1104.       // a press on any key:
  1105.           
  1106.       if ( WaitNextEvent( keyDownMask, &evt, 0L, nil ) )
  1107.          goto escape;
  1108.    }
  1109.    
  1110. escape:
  1111.    // return to calling routine, or post an alert, or ...
  1112. }
  1113.  
  1114. ---------------------------
  1115.  
  1116. >From jjdavis@ucssun1.sdsu.edu (Kyle Davis)
  1117. Subject: Help a dumb father help his son with Mac programming
  1118. Date: 9 Jan 1995 20:24:37 GMT
  1119. Organization: San Diego State University
  1120.  
  1121. PLEASE NOTE: I am posting this message to several groups in the hope of
  1122. maximizing response. Your patience is appreciated.
  1123.  
  1124.  
  1125. My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1126. interested in the Macintosh and programming. He has programmed in Logo and
  1127. in Basic (and is quite creative and good at it). I am, however, entirely
  1128. unable to help him move forward. A shame that I can't provide any
  1129. direction to help him expand his skills given his high degree of interest.
  1130.  
  1131. The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1132.  
  1133. Is there any advice or direction that you can give me to find a place to
  1134. help Kyle start? Are there any books or net resources that explain Mac
  1135. programming (in general) or these types of patches and cheats in
  1136. particular?  Are there programs that help one create cheats and patches?
  1137. How does one look into an existing program? Where does one start?
  1138.  
  1139. I'm eager to help Kyle in any way I can, but, unfortunately am quite lost
  1140. with absolutely no knowledge where to start.
  1141.  
  1142. Any direction or pointers you can provide would be very, very greatly
  1143. appreciated.
  1144.  
  1145. Thanks
  1146.  
  1147. Joel Davis
  1148.  
  1149. +++++++++++++++++++++++++++
  1150.  
  1151. >From raub@alder.circa.ufl.edu (Mauricio C Tavares)
  1152. Date: 9 Jan 1995 15:50:46 -0600
  1153. Organization: UTexas Mail-to-News Gateway
  1154.  
  1155. While shopping for schroberries, Kyle Davis pondered:
  1156.  
  1157. > My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1158. > interested in the Macintosh and programming. He has programmed in Logo and
  1159. > in Basic (and is quite creative and good at it). I am, however, entirely
  1160. > unable to help him move forward. A shame that I can't provide any
  1161. > direction to help him expand his skills given his high degree of interest.
  1162. > The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1163.         By "patches" and game "cheats," do you mean those little 
  1164. modifications you do using ResEdit or whatever and change some aspect in 
  1165. the game such as increase the power/skills/$ of your player?  I a very 
  1166. simplistic way, those "cheats" are born when some hacker, after spending 
  1167. days or weeks looking though the executable of a game, finds out the 
  1168. locations where those variables are stored.  Then, he might change them 
  1169. to something more interesting.  He might even be able to guess enough of 
  1170. the logic of the game so that he can afford to be elegant:  infinite 
  1171. lives and power, get super-duper weapons and treasures (at least their 
  1172. locations), etc.  I myself used to do that with my old Sinclair games 
  1173. long before the Mac even existed. =)
  1174.  
  1175. Another approach is simply to try to see whether there is any magic key 
  1176. combination hidden in the game.  Sometimes those were intentionally left 
  1177. there as an Easter Egg.  the first example the comes to my mind is the 
  1178. one in the TRS Color Computer 3:  by pressing a certain key combination, 
  1179. a picture of the CoCo 3 development team is shown.  Another one has to do 
  1180. with System 7 in the Mac: you can fiddle with some diskette settings to 
  1181. pop out the name of the developers of the disk drive routines.  
  1182.  
  1183. Other times, those key combinations were left by accident; they were 
  1184. originally used to help debug the code and were not removed in the final 
  1185. version.  Ultima 6 for the PC has lots of those combinations.
  1186.  
  1187. > Is there any advice or direction that you can give me to find a place to
  1188. > help Kyle start? Are there any books or net resources that explain Mac
  1189. > programming (in general) or these types of patches and cheats in
  1190. > particular?  Are there programs that help one create cheats and patches?
  1191. > How does one look into an existing program? Where does one start?
  1192.  
  1193.         Well, at this point you need to ask what your son wants to do.  If
  1194. it is simply to find a super neat cheat on games nobody ever heard about,
  1195. he is pretty much on his own.  First of all, if the cheat was known
  1196. already, there would be no point in rediscovering it.  Second, if it is
  1197. not known, it is because you do need to spend some time looking for it,
  1198. and that is assuming it exists in the first place.  If he really wants to
  1199. do that, tell him he will probably need to learn 680000 Assembly and how
  1200. the Mac works.  By the second item I mean how the memory is allocated, how
  1201. a program is loaded into memory, how resources are shared, and so on.  I
  1202. never programmed in Assembly so I canot recommend any good book on 680000
  1203. Assembly. 
  1204.  
  1205. On the other hand, you may consider helping your son learn programming in
  1206. the Mac.  This way, he can follow what I call the Unix way:  if you do not
  1207. like how an application does something, write your own.  There is a pretty
  1208. good BASIC Mac compiler out there.  Programming does teach a little bit of
  1209. self-discipline, organization, logic reasoning, and even math; remember
  1210. that the trajectory of a gun shell can be approximated by a second degree
  1211. polynomial (an ICBM trajectory is more like an ellipse, but that is
  1212. another story).  Also, if he writes a nice program, he can consider
  1213. selling it as shareware/whatever.  Finally, there are plenty of books
  1214. explaining how to program the Mac out there and there is a lot of damn
  1215. good Mac programmers (me excluded =( ) in this list that can help him with
  1216. his programming problems. 
  1217.  
  1218.  
  1219.         One thing you may consider as a father:  hunting for those cheats is
  1220. potentially dangerous; you are working a very low level in the machine. 
  1221. One mistaken and you may crash it.  In the worst case, you lose everything
  1222. that was in its hard drive.  Also, you are modifying commercial 
  1223. programs; that may not be seen very nicely by the software houses.  They 
  1224. can easily say you son is trying to break the code so that he can pirate 
  1225. it, and that is a crime.  They do remember War Games.  
  1226.  
  1227.         The choice (and responsibility) is yours.
  1228.  
  1229.  
  1230. +++++++++++++++++++++++++++
  1231.  
  1232. >From karm@mail.utexas.edu (Kevin Armstrong)
  1233. Date: Mon, 09 Jan 1995 22:07:56 -0600
  1234. Organization: The University of Texas at Austin
  1235.  
  1236. In article <jjdavis-0901951230560001@130.191.208.117>,
  1237. jjdavis@ucssun1.sdsu.edu (Kyle Davis) wrote:
  1238.  
  1239. > My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1240. > interested in the Macintosh and programming. He has programmed in Logo and
  1241. > in Basic (and is quite creative and good at it). I am, however, entirely
  1242. > unable to help him move forward. A shame that I can't provide any
  1243. > direction to help him expand his skills given his high degree of interest.
  1244.  
  1245. > The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1246.  
  1247. > Is there any advice or direction that you can give me to find a place to
  1248. > help Kyle start? Are there any books or net resources that explain Mac
  1249. > programming (in general) or these types of patches and cheats in
  1250. > particular?  Are there programs that help one create cheats and patches?
  1251. > How does one look into an existing program? Where does one start?
  1252.  
  1253. > I'm eager to help Kyle in any way I can, but, unfortunately am quite lost
  1254. > with absolutely no knowledge where to start.
  1255.  
  1256. > Any direction or pointers you can provide would be very, very greatly
  1257. > appreciated.
  1258. >
  1259. > Thanks
  1260.  
  1261. > Joel Davis
  1262.  
  1263. Well, the first thing you need to know is this.  Does your son want to
  1264. program the Macintosh, or does he just want to program in Basic or Logo on
  1265. the Macintosh.  Being 12, I figure he is probably wanting to produce some
  1266. cool new games like Marathon, F-18, or SpaceWord Ho!  I know that was what
  1267. I envisioned when I was 12.  Since you are asking for help, I take it that
  1268. your son has been asking you for help.
  1269.  
  1270. So ask you son what he wants to do.  If he wants to know how to "patch" a
  1271. program, he will need to understand lots of things: How does assembly
  1272. work, how does the mac work, what do the registers do, what addressing
  1273. modes is this instruction using, how is the stack being manipulated.  So
  1274. the first place to start would be learning something that would be
  1275. considered a bit more advanced than BASIC, (sorry all you BASIC fans). 
  1276. Pascal or C come to mind.  Some would argue that he should skip Pascal,
  1277. but it does require more structure than C so it would impose a bit more
  1278. discipline in those early and tough learning stages.  On the other hand, C
  1279. and C++ are the languages Apple is pushing everyone to use.  C++ requires
  1280. a bit more structure than C, but not a lot.  It does however have some
  1281. nice features and clean-ups to the language that I prefer.
  1282.  
  1283. The problem now is that either language has a bit of a learning curve. 
  1284. They are quite different from BASIC.  Especially C.  They also require a
  1285. bit more knowledge of the programming environment being used.  BASIC is
  1286. pretty forgiving. You run the BASIC development environment, type in your
  1287. program, tell it to run, and it runs if there aren't any mistakes.  Pascal
  1288. and C are similar, but they have project files and lots of other strange
  1289. quirks.  Then you get into Apple's libraries and things get even
  1290. stranger.  But, trial and error is a great learning tool.
  1291.  
  1292. So where should you go from here?  Talk to you son, ask him what he really
  1293. wants to do.  Tell him that it is a lot harder than he may think, but that
  1294. you are confident that he could learn how to do it (a good self-esteem
  1295. booster there :)).  Then ask him what he wants to do it with.  I really
  1296. think that he should start with C or Pascal.  Assembly isn't something you
  1297. want to start programming with.  Especially because the only Assembly
  1298. Compiler I know of on the Mac is the one in MPW, and MPW is a monster that
  1299. I don't want to get too far into.  So what are your choices?  MPW,
  1300. Symantec's Think, and the Metrowerks CodeWarrior environments are the most
  1301. popular.  You should limit it to Think Pascal or CodeWarrior though.  The
  1302. good thing about CodeWarrior is that you get both the C, C++, and Pascal
  1303. languages on one CD-ROM, the problem is that it is on a CD-ROM.  You will
  1304. also have to decide which CodeWarrior CD-ROM to purchase.  Bronze or Gold
  1305. (Platinum comes along later, see csmp.codewarrior for details).  The
  1306. Bronze is a 68000 only environment.  It would be good for a 12 year old
  1307. using either a 68K based Mac or a Power Mac.  Again, check out the
  1308. codewarrior newsgroup for more info.
  1309.  
  1310. After picking a programming language, you should probably go to a good
  1311. book store and find a beginning programming book or two, and maybe an
  1312. intermediate book.  You can always go book shopping again when he has
  1313. figured out how to do the easier stuff.  A good way for him to learn is by
  1314. translating his BASIC programs to Pascal or C.  That may be hard if there
  1315. are graphics or sounds, but if he has any text based programs, he can
  1316. translate those fairly easily.
  1317.  
  1318. Finally, if he really wants to program on the Mac, you will have to start
  1319. looking into buying the Inside Macintosh Books.  They are available on a
  1320. CD-ROM (again that CD-ROM hurdle), or as big thick books.  There is also a
  1321. program called Think Reference which has all of the Mac API calls through
  1322. Original Inside Macintosh 6.  Unfortunately, it is old and hasn't been
  1323. kept up by Symantec very well.  Apple is going to release a new reference
  1324. package soon.  March comes to mind, but I don't know for sure.  It is
  1325. based on the New Inside Mac volumes.  Programming on the Mac will require
  1326. more than just reference material though.  So make another trip to the
  1327. bookstore and pick out some books on programming the Mac and then let him
  1328. have a go at it.
  1329.  
  1330. Good luck!
  1331.  
  1332. -- 
  1333. Kevin Armstrong
  1334. karm@mail.utexas.edu
  1335.  
  1336. +++++++++++++++++++++++++++
  1337.  
  1338. >From Jaeger@fquest.com (Brian Stern)
  1339. Date: 10 Jan 1995 04:34:19 GMT
  1340. Organization: The University of Texas at Austin, Austin, Texas
  1341.  
  1342. In article <jjdavis-0901951230560001@130.191.208.117>,
  1343. jjdavis@ucssun1.sdsu.edu (Kyle Davis) wrote:
  1344.  
  1345. < PLEASE NOTE: I am posting this message to several groups in the hope of
  1346. < maximizing response. Your patience is appreciated.
  1347. < My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1348. < interested in the Macintosh and programming. He has programmed in Logo and
  1349. < in Basic (and is quite creative and good at it). I am, however, entirely
  1350. < unable to help him move forward. A shame that I can't provide any
  1351. < direction to help him expand his skills given his high degree of interest.
  1352. < The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1353. < Is there any advice or direction that you can give me to find a place to
  1354. < help Kyle start? Are there any books or net resources that explain Mac
  1355. < programming (in general) or these types of patches and cheats in
  1356. < particular?  Are there programs that help one create cheats and patches?
  1357. < How does one look into an existing program? Where does one start?
  1358. < I'm eager to help Kyle in any way I can, but, unfortunately am quite lost
  1359. < with absolutely no knowledge where to start.
  1360. < Any direction or pointers you can provide would be very, very greatly
  1361. < appreciated.
  1362. < Thanks
  1363. < Joel Davis
  1364.  
  1365. Kyle would do better to write his own game(s) than to try to cheat on
  1366. others.  Logo and Basic ar OK for the beginner but he should move on to
  1367. languages like Pascal or C (eventually to an object-oriented language like
  1368. C++/smalltalk or others).
  1369.  
  1370. Writing a simple game like a tic-tac-toe player or something that
  1371. automatially generates mazes and then tries to solve them or competes with
  1372. the user who is concurrently trying to solve it, or any of a hundred
  1373. others will help him to move forward.  Any sort of game with simple
  1374. graphics will be fun and interesting.
  1375.  
  1376. I will recommend that you purchase the CodeWarrior environment for him. 
  1377. It's $99 for educational users (I'm sure a bright 12 year old is in school
  1378. :)  It comes with pascal/C/and c++ compilers.  I'm sure he'll go to town
  1379. with it.
  1380.  
  1381. Good luck,
  1382.  
  1383. -- 
  1384. Brian  Stern  :-{)}
  1385. Toolbox commando and Menu bard
  1386. Jaeger@fquest.com
  1387.  
  1388. +++++++++++++++++++++++++++
  1389.  
  1390. >From hecht@vnet.net (Michael Hecht)
  1391. Date: 10 Jan 1995 05:10:14 GMT
  1392. Organization: Vnet Internet Access, Charlotte, NC -  info@char.vnet.net
  1393.  
  1394. Joel,
  1395.  
  1396. My best suggestion is to get a copy of Resorcerer. It is a resource editor
  1397. similar to ResEdit, but it includes an editor for 68K machine code that
  1398. has some patching capabilities, like replacing a set of instructions with
  1399. "no-op's" and branching around segments of code. I believe the manual even
  1400. includes some tips on how to patch applications. Resorcerer is from
  1401.  
  1402.    Mathemaesthetics Inc.
  1403.    PO Box 156
  1404.    Chestnut Hill, MA 02167
  1405.    ph. 617-738-8803
  1406.    FAX 617-738-0164
  1407.    e-mail: RESORCERER@AppleLink.apple.com
  1408.  
  1409. He may, however, find 68K machine code a bit overwhelming. I remember
  1410. being somewhat overwhelmed by Z80 machine code at around age 14, but
  1411. disassembling the ROMs of my TRS-80 was a great learning experience!
  1412.  
  1413. Perhaps this will pique your son's interests in programming with a
  1414. higher-level language (where he should really be spending his time anyway
  1415. :-). You might also look into "Thin C" (a starter version of THINK C) from
  1416. Symantec. It comes with several tutorials.
  1417.  
  1418. Dave Mark's book, "Macintosh Programming Primer using C" (or something
  1419. like that--it's a red book), worked for my wife when she needed to learn
  1420. some Mac skills.
  1421.  
  1422. Good luck!
  1423. --Michael
  1424.  
  1425. =======================================================================
  1426. Michael P. Hecht             hecht@vnet.net              Durham, NC USA
  1427.  
  1428. +++++++++++++++++++++++++++
  1429.  
  1430. >From Ben_Hamilton@chatter.com (Ben Hamilton)
  1431. Date: 09 Jan 1995 22:37:27 GMT
  1432. Organization: The ChatterBox  (817) 242-3088
  1433.  
  1434. Hi Kyle,
  1435.     From the hands of a 17 year old programmer, the best way to start is buy
  1436. him a basic book on C 
  1437. (The one I learned from was the awe holy book o "C By Example" from "Que" you
  1438. can find it at hastings.
  1439. After learing it(with more frustartion and time than you think) move on to
  1440. "Macintosh Programming Primer" by Mark Reed published by Addison Wesley. I
  1441. started in the ...7th or8th grade I guess that would made me about 13 or 14
  1442. so your son has a decent head start. I worked at the "Texas Woman's
  1443. University"
  1444. computer department my first year of high school doing chaos theory work.(FI)
  1445. Frequency analysis and so forth. Anyhow they were smart enough to put that
  1446. stuff on a mac. The mac is suprisingly ,scarcely coded on at the scientific
  1447. level. Anyhow I like talking about young programmers 'cause it's a field
  1448. where know how surmounts age. 
  1449.  
  1450. I'm assuming you will buy a compiler for the lad.
  1451. Get CodeWarrior if you have a silver disk spinner.
  1452. Or get Symantec if you don't.
  1453.  
  1454. Don't make the mistake I made. Don't let him fear getting his hands dirty.
  1455. Mess up a shit load you'll do better in the long run. Learn how to program
  1456. Windows and Dos. (So you can insult their puny(?) OS)
  1457.  
  1458. void And send me a copy of his award winning program(Free and register(A1)ed
  1459. that is);
  1460.  
  1461.  
  1462. +++++++++++++++++++++++++++
  1463.  
  1464. >From ernie@winternet.com (Ernie Soffronoff)
  1465. Date: 10 Jan 1995 19:21:01 GMT
  1466. Organization: StarNet Communications, Inc
  1467.  
  1468. A few things got me on the road to Mac programming... (tho I still have a 
  1469. looong way to go):
  1470.  
  1471. 1)  AppMaker.  This program will generate the Mac interface for a 
  1472. program, which saves a lot of time.  By saving a lot of time you're 
  1473. better able to write a lot of programs.  I also learned more about Mac 
  1474. programming from reading the AppMaker generated code than by any other means.
  1475.  
  1476. 2) Think Reference.  This makes it easy to look up stuff you don't
  1477. understand when reading other people's (and AppMaker's) code.  There's a
  1478. new tool coming out that does about the same thing, but I doubt it can top
  1479. TR. 
  1480.  
  1481. 3)  Writing After Dark screensavers.  Like with AppMaker, After Dark 
  1482. takes care of a lot of the details for you and you just have to plug in 
  1483. the functionality.  This is (IMO) the greatest way to get started with 
  1484. Mac graphics programming (an area where AppMaker falls short).  You won't 
  1485. necessarily be writing "games" but the results are quick and the product 
  1486. is easy to share.
  1487.  
  1488. --Ernie
  1489.  
  1490. +++++++++++++++++++++++++++
  1491.  
  1492. >From emb121@hearst.cac.psu.edu (emb121)
  1493. Date: 11 Jan 1995 22:12:25 GMT
  1494. Organization: Penn State University, Center for Academic Computing
  1495.  
  1496. In article <jjdavis-0901951230560001@130.191.208.117>
  1497. jjdavis@ucssun1.sdsu.edu (Kyle Davis) writes:
  1498.  
  1499. > My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1500. > interested in the Macintosh and programming. He has programmed in Logo and
  1501. > in Basic (and is quite creative and good at it). I am, however, entirely
  1502. > unable to help him move forward. A shame that I can't provide any
  1503. > direction to help him expand his skills given his high degree of interest.
  1504.  
  1505. I started programming in BASIC in about fifth grade on an Apple IIe. 
  1506. When I moved over to the Mac I bought THINK Pascal but never really got
  1507. into it.  Now I'm using FutureBasic (Zedcor, Inc. ZEDCOR forum on
  1508. America Online; phone 602-881-8101; I think they have some special
  1509. package deal going for under $100 but you'll have to call to be sure),
  1510. and I am actually able to do serious things with it.  The documentation
  1511. is much more friendly than what I got with THINK Pascal, and the
  1512. FutureBasic documentation covers basic Macintosh tools like sound,
  1513. QuickDraw, and QuickTime playback so you don't have to buy fifty other
  1514. reference books just to get started.  What I liked most was that I was
  1515. able to start with built-in, simple to use FutureBasic commands and
  1516. later switch over to the more powerful Mac toolbox calls as needed.
  1517.  
  1518.  
  1519. -Eric Bennett (ericb@psu.edu)
  1520. FTP/HTTP://emb121.rh.psu.edu
  1521.  
  1522. Drawing on my fine command of the language, I said nothing.
  1523. -Robert Benchley
  1524.  
  1525. +++++++++++++++++++++++++++
  1526.  
  1527. >From ghendric@medea.gp.usm.edu (Gregory S. Hendricks)
  1528. Date: 12 Jan 1995 22:04:44 GMT
  1529. Organization: University of Southern Mississippi
  1530.  
  1531. Kyle Davis (jjdavis@ucssun1.sdsu.edu) wrote:
  1532. : PLEASE NOTE: I am posting this message to several groups in the hope of
  1533. : maximizing response. Your patience is appreciated.
  1534.  
  1535.  
  1536. : My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1537. : interested in the Macintosh and programming. He has programmed in Logo and
  1538. : in Basic (and is quite creative and good at it). I am, however, entirely
  1539. : unable to help him move forward. A shame that I can't provide any
  1540. : direction to help him expand his skills given his high degree of interest.
  1541.  
  1542. : The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1543.  
  1544. : Is there any advice or direction that you can give me to find a place to
  1545. : help Kyle start? Are there any books or net resources that explain Mac
  1546. : programming (in general) or these types of patches and cheats in
  1547. : particular?  Are there programs that help one create cheats and patches?
  1548. : How does one look into an existing program? Where does one start?
  1549.  
  1550. : I'm eager to help Kyle in any way I can, but, unfortunately am quite lost
  1551. : with absolutely no knowledge where to start.
  1552.  
  1553. : Any direction or pointers you can provide would be very, very greatly
  1554. : appreciated.
  1555.  
  1556. : Thanks
  1557.  
  1558. : Joel Davis
  1559.  
  1560.    Your son should get Zedcor's Future Basic for the Mac. He should also get
  1561. some Inside Mac books and a beginning Mac programming book on how to use
  1562. the Mac toolbox. Of course, to understand those books, he will
  1563. need to have some knowledge of Pascal functions/procedures (and the C or
  1564. C++ language), so it would probably be better for him to give up Basic and
  1565. learn Pascal or C instead. Learning the Toolbox is what sets the Mac apart
  1566. from programming for other types of computers, and I'm not sure what kind
  1567. of documentation comes with Future Basic. A lot of this will also depend
  1568. on your son's level of computer understanding, since a big part of Mac
  1569. programming is managing memory - not an easy task, even for grown ups like
  1570. myself. Unfortunately, most game cheats that I know of are usually written
  1571. as extensions, so getting away from the memory aspect of it is impossible
  1572. (extensions actually become a part of your system software when the Mac
  1573. boots up - more extensions = more RAM usage).
  1574.    As far as cheats go, writing one would require knowing how the program
  1575. works, so you would have to get the code from the developers of the game,
  1576. which would require their permission. I haven't the slightest idea about
  1577. how to go about doing that, except to contact (e-mail) other cheat
  1578. programmers or game programmers. The AOL Developers forum has a SIG for
  1579. game developers, so that might be a good place to start. Hope all this
  1580. stuff has helped. Maybe some game programmers out there could comment. I'm
  1581. fairly new to Mac programming myself.........
  1582.  
  1583. Shane
  1584.  
  1585. +++++++++++++++++++++++++++
  1586.  
  1587. >From ivan_cavero_belaunde@avid.com (Ivan Cavero Belaznde)
  1588. Date: Thu, 12 Jan 1995 21:13:18 -0500
  1589. Organization: Avid Technology, Inc.
  1590.  
  1591. > In article <jjdavis-0901951230560001@130.191.208.117>,
  1592. > jjdavis@ucssun1.sdsu.edu (Kyle Davis) wrote:
  1593. >  
  1594. > > My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1595. > > interested in the Macintosh and programming. He has programmed in Logo and
  1596. > > in Basic (and is quite creative and good at it). I am, however, entirely
  1597. > > unable to help him move forward. A shame that I can't provide any
  1598. > > direction to help him expand his skills given his high degree of interest.
  1599. > > The net seems to be full of "patches" and game "cheats." These
  1600. intrigue Kyle.
  1601. >  
  1602. > > Is there any advice or direction that you can give me to find a place to
  1603. > > help Kyle start? Are there any books or net resources that explain Mac
  1604. > > programming (in general) or these types of patches and cheats in
  1605. > > particular?  Are there programs that help one create cheats and patches?
  1606. > > How does one look into an existing program? Where does one start?
  1607. >  
  1608. > > I'm eager to help Kyle in any way I can, but, unfortunately am quite lost
  1609. > > with absolutely no knowledge where to start.
  1610. >  
  1611. > > Any direction or pointers you can provide would be very, very greatly
  1612. > > appreciated.
  1613. > >
  1614. > > Thanks
  1615. >  
  1616. > > Joel Davis
  1617.  
  1618. It depends on what he wants to do, as others have said; if he does truly
  1619. want to learn programming on the Mac, and he's used BASIC and LOGO, start
  1620. him up with either HyperCard or SuperCard - they will serve as a useful
  1621. introduction to the various Mac and OO-like concepts (events, message
  1622. passing, ownership hierarchy, etc); it's easy enough to get started and
  1623. build pretty real stuff as he gets better (you can unleash ResEdit and the
  1624. boatload of XCMD libraries out there as he starts butting his head against
  1625. HC's limits). Plus it will wean him from BASIC's evil ways. Then drop him
  1626. into THINK (I'd rather say CW, but there's nothing like Dave Mark's
  1627. "Macintosh Programming Primer" for it...). Finally, introduce him to the
  1628. various programming resources around the net (FAQs, WWW pages, csmp*, the
  1629. CSMP digests, ftp source sites, etc).
  1630.  
  1631. Hope this helps,
  1632.  
  1633. -Ivan
  1634. - ---
  1635. Ivan Cavero Belaznde (ivan_cavero_belaunde@avid.com)
  1636. Avid VideoShop Project Lead
  1637. Avid Technology, Inc.
  1638.  
  1639. +++++++++++++++++++++++++++
  1640.  
  1641. >From andrewm@mpx.com.au (Andrew Miehs)
  1642. Date: 14 Jan 1995 08:02:50 GMT
  1643. Organization: Microplex Pty Ltd
  1644.  
  1645. Newsgroups: comp.sys.mac.programmer
  1646. Subject: Re: Help a dumb father help his son with Mac programming  
  1647.  
  1648. In message <199501092151.QAA21881@grove.ufl.edu>, raub@alder.circa.ufl.edu 
  1649. (Mauricio C Tavares) writes:
  1650.  
  1651. >While shopping for schroberries, Kyle Davis pondered:
  1652. >
  1653. >> My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1654. >> interested in the Macintosh and programming. He has programmed in Logo and
  1655. >> in Basic (and is quite creative and good at it). I am, however, entirely
  1656. >> unable to help him move forward. A shame that I can't provide any
  1657. >> direction to help him expand his skills given his high degree of interest.
  1658. >> 
  1659. >> The net seems to be full of "patches" and game "cheats." These intrigue 
  1660. Kyle.
  1661.  
  1662. Unfortunately, as machines and operating system become more powerful, they 
  1663. generally become more difficult to program. I started programming years ago on 
  1664. an Apple ][ in basic, and the on to 6502. All this being said and done, The Mac 
  1665.  
  1666. is a great machine, and programing them can be quite rewarding, if not 
  1667. frustrating at times. I would definitely recommend purchasing an "Idiots guide 
  1668. to C" or something along those line. These books are usually writen for the 
  1669. simple minded, (like myself). For the first year, it is not important to be 
  1670. able to use the Mac Interface. It is much more important to get a firm 
  1671. grounding in C and C++ so that when you finally do make the changeover from 
  1672. ANSI C you will have a huge head start. 
  1673.  
  1674. Later on, when the need arises, purchase a copy of the Inside Mac Series (or 
  1675. whatever they are called now).
  1676.  
  1677. In summary, I would recommend getting
  1678. A C Compiler (capable of C++) so CodeWarrior, or Think C... etc
  1679. A Book on programming in ANSI C. - The Macintosh stuff can wait till later.
  1680.  
  1681. Good luck, and happy programming...
  1682.  
  1683. andrewm@jolt.mpx.com.au
  1684.  
  1685.  
  1686.  
  1687.  
  1688.  
  1689.  
  1690.  
  1691. +++++++++++++++++++++++++++
  1692.  
  1693. >From jobell@bnr.ca (Ritchie Brock)
  1694. Date: 10 Jan 1995 08:58:53 -0600
  1695. Organization: Bell-Northern Research, Richardson, TX
  1696.  
  1697. In article <199501092151.QAA21881@grove.ufl.edu>,
  1698. Mauricio C Tavares <raub@alder.circa.ufl.edu> wrote:
  1699. >While shopping for schroberries, Kyle Davis pondered:
  1700. >
  1701. >> My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1702. >> interested in the Macintosh and programming. He has programmed in Logo and
  1703. >> in Basic (and is quite creative and good at it). I am, however, entirely
  1704. >> unable to help him move forward. A shame that I can't provide any
  1705. >> direction to help him expand his skills given his high degree of interest.
  1706. >> 
  1707. >> The net seems to be full of "patches" and game "cheats." These intrigue Kyle.
  1708. >> 
  1709. >Another approach is simply to try to see whether there is any magic key 
  1710. >combination hidden in the game.  Sometimes those were intentionally left 
  1711. >there as an Easter Egg.  the first example the comes to my mind is the 
  1712. >one in the TRS Color Computer 3:  by pressing a certain key combination, 
  1713. >a picture of the CoCo 3 development team is shown.  Another one has to do 
  1714. >
  1715.  
  1716. Wow!  Another person who used a CoCo 3.  Now where are all those back issues
  1717. of Rainbow?!
  1718.  
  1719. Joe
  1720. -- 
  1721. * Joseph A. Bell (NOT Ritchie Brock)                       *
  1722. * Northern Telecom / Bell-Northern Research                *
  1723. * Email: jobell@bnr.ca                                     * 
  1724.  
  1725. +++++++++++++++++++++++++++
  1726.  
  1727. >From ai139@detroit.freenet.org (Jeremy Ryan Jankowski)
  1728. Date: 17 Jan 1995 03:38:29 GMT
  1729. Organization: The Greater Detroit Free-Net
  1730.  
  1731.  
  1732. Personally, I would learn Pascal first. Though Pascal is being
  1733. phased out, it was easier to learn in my opinion, and most of
  1734. the toolbox references that your son will need are written in 
  1735. Pascal. Though he may eventually graduate to C (as I did, and I'm
  1736. only 15) right now, Pascal is the best thing for him.
  1737.  Any questions? I've been at this for about a year and a half,
  1738. so if you or your son needs any help, just drop me a message.
  1739.  -JRJ
  1740. ai139@detroit.freenet.org
  1741. -- 
  1742.  
  1743. +++++++++++++++++++++++++++
  1744.  
  1745. >From John Kawakami <ed_asst@xplain.com>
  1746. Date: Mon, 16 Jan 1995 19:38:37 GMT
  1747. Organization: Xplain Corp.
  1748.  
  1749. In article <3f491s$cua@server.st.usm.edu>, ghendric@medea.gp.usm.edu
  1750. (Gregory S. Hendricks) wrote:
  1751.  
  1752. > Kyle Davis (jjdavis@ucssun1.sdsu.edu) wrote:
  1753. > : My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1754. > : interested in the Macintosh and programming. He has programmed in Logo and
  1755. > : in Basic (and is quite creative and good at it). I am, however, entirely
  1756. > : unable to help him move forward. A shame that I can't provide any
  1757. > : direction to help him expand his skills given his high degree of interest.
  1758. > : Joel Davis
  1759. >    Your son should get Zedcor's Future Basic for the Mac. He should also get
  1760. > some Inside Mac books and a beginning Mac programming book on how to use
  1761. > the Mac toolbox...
  1762.  
  1763. Find out where the nearest mac-friendly computer oriented bookstores are,
  1764. and let him loose for a few hours.  He won't find much info on "game
  1765. cheats" but he should find a few interesting books.  (Oh yeah, get him
  1766. MacTech too!)
  1767.  
  1768. One book to buy would be "Learning C on the Macintosh" by Dave Mark (can
  1769. be ordered for $31.45 from the Mail Order Store
  1770. [custservice@xplain.com]).  This book teaches C and includes a C compiler
  1771. for you to experiment with.
  1772.  
  1773. FYI - if you decide to get your son a C++ compiler (this will probably
  1774. happen before age 18), remember to take advantage of EDUCATIONAL DISCOUNTS
  1775. from the two main compiler vendors: Symantec and Metrowerks.
  1776.  
  1777. Another important resource is a good library.  I used to ride the bus to
  1778. the local colleges to get at the books.  (It also helped that there were
  1779. terminals in the libraries, and I could use a friend's cyber account.) 
  1780. Most public libraries around here tend to have books like "10,001 Excel
  1781. Trix" or "Borneo Adventures with Flight Simulator 2". :)
  1782.  
  1783. - -MacTech Magazine--------------------------------------------------
  1784. PO Box 250055, Los Angeles, CA 90025, 310-575-4343, Fax:310-575-0925
  1785. For more info, anonymous ftp: ftp.netcom.com, cd to /pub/xp/xplain
  1786. email to the following @xplain.com : custservice, editorial, 
  1787. adsales, marketing, accounting, pressreleases, 
  1788. progchallenge, publisher, info
  1789.  
  1790. +++++++++++++++++++++++++++
  1791.  
  1792. >From ruhl@phoebe.cair.du.edu (Robert A. Uhl)
  1793. Date: 17 Jan 1995 15:24:55 GMT
  1794. Organization: University of Denver
  1795.  
  1796. In article <3ffe3l$7cv@detroit.freenet.org>,
  1797. Jeremy Ryan Jankowski <ai139@detroit.freenet.org> wrote:
  1798. >
  1799. >Personally, I would learn Pascal first. Though Pascal is being
  1800. >phased out, it was easier to learn in my opinion, and most of
  1801. >the toolbox references that your son will need are written in 
  1802. >Pascal. Though he may eventually graduate to C (as I did, and I'm
  1803. >only 15) right now, Pascal is the best thing for him.
  1804. > Any questions? I've been at this for about a year and a half,
  1805. >so if you or your son needs any help, just drop me a message.
  1806.  
  1807.   I disagree. C is probably best. I learned it at 14, and I'm sure that
  1808. your son will be able to. There is a book by Steve Oualline and from
  1809. O'Reilly and Associates that teaches C. I cannot recall the name, but
  1810. any good bookstore (not Waldenbooks or B. Dalton, but a _bookstore_)
  1811. should have it in stock. It's ~10 from what I recall.
  1812.  
  1813.   Pascal is on the way out. It is seldom used. Why spend time learning a
  1814. language which will never be used? Learn C, suffer a week or two, and
  1815. get on with the business of programming great apps.
  1816. -- 
  1817. - ------------------------------------------------------------------------
  1818. | Bob Uhl | Spectre                  | `In touto nika' +                 |
  1819. | U of D  | Baron Robert von Raetzin | http://mercury.cair.du.edu/~ruhl/ |
  1820. - ------------------------------------------------------------------------
  1821.  
  1822. +++++++++++++++++++++++++++
  1823.  
  1824. >From joe@expersoft.com (Joe Gervais)
  1825. Date: 18 Jan 1995 13:01:28 -0800
  1826. Organization: Expersoft
  1827.  
  1828. In article <3f80fa$q9m@inferno.mpx.com.au>,
  1829. Andrew Miehs <andrewm@mpx.com.au> wrote:
  1830. >Newsgroups: comp.sys.mac.programmer
  1831. >Subject: Re: Help a dumb father help his son with Mac programming  
  1832. >
  1833. >In message <199501092151.QAA21881@grove.ufl.edu>, raub@alder.circa.ufl.edu 
  1834. >(Mauricio C Tavares) writes:
  1835. >
  1836. >>While shopping for schroberries, Kyle Davis pondered:
  1837. >>
  1838. >>> My son, Kyle aged 12, is (in all honesty) quite bright and extremely
  1839. >>> interested in the Macintosh and programming. He has programmed in Logo and
  1840. >>> in Basic (and is quite creative and good at it). I am, however, entirely
  1841. [SNIP]
  1842. >
  1843. >Unfortunately, as machines and operating system become more powerful, they 
  1844. >generally become more difficult to program. I started programming years ago on 
  1845. [SNIP]
  1846. >simple minded, (like myself). For the first year, it is not important to be 
  1847. >able to use the Mac Interface. It is much more important to get a firm 
  1848. >grounding in C and C++ so that when you finally do make the changeover from 
  1849. >ANSI C you will have a huge head start. 
  1850.  
  1851.  
  1852. Excellent point. In particular, CodeWarrior's SIOUX library
  1853. allows basic text I/O in a window that it creates for you.
  1854. Nice way to avoid mucking with the Mac Toolbox until one
  1855. has a good grasp of Pascal/C/C++ programming in general.
  1856.  
  1857. Also a rather handy way to get core pieces of a project
  1858. running/debugged - simple menu driven text I/O to test out
  1859. the various functional objects you've created. When it's all
  1860. shaken out, convert it into a full-blown Mac app. Yeah, I
  1861. know it sounds ugly, but I'm a unix guy at heart. :)
  1862.  
  1863. [SNIP]
  1864. >In summary, I would recommend getting
  1865. >A C Compiler (capable of C++) so CodeWarrior, or Think C... etc
  1866. >A Book on programming in ANSI C. - The Macintosh stuff can wait till later.
  1867.  
  1868. What he said. :) A favorite C++ book of mine (for starting)
  1869. is by Lippman. Easy to read but not too fluffy.
  1870.  
  1871. Good luck!
  1872.  
  1873. Cheers,
  1874.  
  1875. -Joe
  1876.  
  1877.  
  1878. +++++++++++++++++++++++++++
  1879.  
  1880. >From nhiggins@cln.etc.bc.ca (Nigel Higgins)
  1881. Date: Thu, 19 Jan 1995 05:37:45 GMT
  1882. Organization: The Education Technology Centre of British Columbia. (Canada)
  1883.  
  1884.  
  1885. In a previous article, ai139@detroit.freenet.org (Jeremy Ryan Jankowski) says:
  1886.  
  1887. >
  1888. >Personally, I would learn Pascal first. Though Pascal is being
  1889. >phased out, it was easier to learn in my opinion, and most of
  1890. >the toolbox references that your son will need are written in 
  1891. >Pascal. Though he may eventually graduate to C (as I did, and I'm
  1892. >only 15) right now, Pascal is the best thing for him.
  1893. > Any questions? I've been at this for about a year and a half,
  1894. >so if you or your son needs any help, just drop me a message.
  1895. > -JRJ
  1896. >ai139@detroit.freenet.org
  1897. >-- 
  1898. >
  1899.  
  1900. Sounds exactly like me. I'm 16, started using THINK Pascal at 14, and 
  1901. just last year I bought CodeWarrior. If your son is smart, give him the 
  1902. tools he needs (THINK Pascal, THINK C, or CodeWarrior) some good 
  1903. programming books by Dave Mark and he should be able to find his way from 
  1904. there.
  1905.  
  1906. Good luck.
  1907.  
  1908. +++++++++++++++++++++++++++
  1909.  
  1910. >From Tom Rowlands <tomr@oaf.apana.org.au>
  1911. Date: Sat, 21 Jan 95 08:30:20 +1000 (AEST)
  1912. Organization: Best Before A Week Last Tuesday
  1913.  
  1914.  
  1915. In article <3fgng7$gqn@cassandra.cair.du.edu>, Robert A. Uhl writes:
  1916.  
  1917. > In article <3ffe3l$7cv@detroit.freenet.org>,
  1918. > Jeremy Ryan Jankowski <ai139@detroit.freenet.org> wrote:
  1919. >
  1920. >Personally, I would learn Pascal first. Though Pascal is being
  1921. >phased out, it was easier to learn in my opinion, and most of
  1922. >the toolbox references that your son will need are written in 
  1923. >Pascal. Though he may eventually graduate to C (as I did, and I'm
  1924. >only 15) right now, Pascal is the best thing for him.
  1925. > Any questions? I've been at this for about a year and a half,
  1926. >so if you or your son needs any help, just drop me a message.
  1927.  
  1928. Nope. I diagree.
  1929.  
  1930. Pascal is a nasty language. Personally, I learn any lanugage I can. (If there is 
  1931. a book teaching you it, I will learn it. Which is rather pointless, but it9s 
  1932. interesting.) Learn C. Pascal is phazed out now, noone uses it much.
  1933.  
  1934. BTW: Drop me a line if you want!
  1935.  
  1936. Tom Rowlands
  1937. tomr@oaf.apana.org.au
  1938. (14 year old Led Zeppelin freak.)
  1939.  
  1940. +++++++++++++++++++++++++++
  1941.  
  1942. >From mdg@seas.gwu.edu (Mark D. Gerl)
  1943. Date: 26 Jan 1995 14:56:12 GMT
  1944. Organization: George Washington University
  1945.  
  1946. John Kawakami (ed_asst@xplain.com) wrote:
  1947. : One book to buy would be "Learning C on the Macintosh" by Dave Mark (can
  1948. : be ordered for $31.45 from the Mail Order Store
  1949. : [custservice@xplain.com]).  This book teaches C and includes a C compiler
  1950. : for you to experiment with.
  1951.  
  1952. Actually, most people can recommend ANY of the books written by Dave Mark.
  1953. The C++ counterpart to this suggested C book is also excellent, and a few
  1954. years newer.  Your son would probably do better to start here...
  1955.  
  1956.  
  1957. ---------------------------
  1958.  
  1959. >From mnc@netcom.com (Miguel Cruz)
  1960. Subject: How can I tell if a driver (eg MacTCP) is open
  1961. Date: Mon, 30 Jan 1995 20:37:11 GMT
  1962. Organization: Unaffiliated
  1963.  
  1964. Can someone point me towards a snippet which would demonstrate how to 
  1965. determine whether a specified driver is open? I would like to open MacTCP 
  1966. but only if I am already sure that it has been opened. I'm sure it's 
  1967. possible, as there is some dcmd which came with MacsBug on the 
  1968. codewarrior CD which is able to give status information on all drivers. 
  1969. I've combed through IM and not found any terribly germane information.
  1970.  
  1971. Thanks.
  1972.  
  1973. miguel
  1974.  
  1975. +++++++++++++++++++++++++++
  1976.  
  1977. >From resnick@uiuc.edu (Pete Resnick)
  1978. Date: Mon, 30 Jan 1995 16:13:38 -0600
  1979. Organization: University of Illinois at Urbana-Champaign
  1980.  
  1981. In article <mncD38Jy0.31z@netcom.com>, mnc@netcom.com (Miguel Cruz) wrote:
  1982.  
  1983. >Can someone point me towards a snippet which would demonstrate how to 
  1984. >determine whether a specified driver is open? I would like to open MacTCP 
  1985. >but only if I am already sure that it has been opened. I'm sure it's 
  1986. >possible, as there is some dcmd which came with MacsBug on the 
  1987. >codewarrior CD which is able to give status information on all drivers. 
  1988. >I've combed through IM and not found any terribly germane information.
  1989.  
  1990. #ifdef __LOWMEM__
  1991. #   define UTABLEBASE   LMGetUTableBase()
  1992. #   define UNITNTRYCNT  LMGetUnitNtryCnt()
  1993. #else
  1994. #ifdef __SYSEQU__
  1995. #   define UTABLEBASE   (*(DCtlHandle **)UTableBase)
  1996. #   define UNITNTRYCNT  (*(short *)UnitNtryCnt)
  1997. #else
  1998. #   define UTABLEBASE   UTableBase
  1999. #   define UNITNTRYCNT  UnitNtryCnt
  2000. #endif
  2001. #endif
  2002.  
  2003. #ifndef dOpened
  2004. #   define dOpened      0x0020
  2005. #endif
  2006.  
  2007. short GetDrvrRefNum(Str255 drvrName)
  2008. {
  2009.     short unitNum;
  2010.     DCtlPtr curDCtlPtr, *curDCtlHndl, **UTableEntry;
  2011.     DriverPtr curDrvrPtr;
  2012.     
  2013.     /* Start at UTableBase */
  2014.     UTableEntry = UTABLEBASE;
  2015.     
  2016.     /* Walk through the Unit Table */
  2017.     for(unitNum = 0; unitNum < UNITNTRYCNT; ++unitNum) {
  2018.     
  2019.         /* Get the entry at this point in the unit table and increment */
  2020.         curDCtlHndl = *UTableEntry++;
  2021.         
  2022.         if(curDCtlHndl != nil) {
  2023.  
  2024.             /* Dereference the control entry */
  2025.             curDCtlPtr = *curDCtlHndl;
  2026.             
  2027.             /* Get the pointer to the driver */
  2028.             curDrvrPtr = (DriverPtr)curDCtlPtr->dCtlDriver;
  2029.  
  2030.             /* If this is a RAM driver, it's a handle. ROM is a pointer */
  2031.             if((curDCtlPtr->dCtlFlags & dRAMBased) && (curDrvrPtr != nil))
  2032.                 curDrvrPtr = *(DriverPtr *)curDrvrPtr;
  2033.             
  2034.             /* Does the driver name match? */
  2035.             if(curDrvrPtr != nil)
  2036.                 if(EqualString(drvrName, curDrvrPtr->drvrName,
  2037.                                false, true))
  2038.                     return(~unitNum);
  2039.         }
  2040.     }
  2041.     return(0);
  2042. }
  2043.  
  2044. Boolean IsDriverOpen(Str255 drvrName)
  2045. {
  2046.     short refNum;
  2047.     DCtlHandle driverHandle;
  2048.     
  2049.     refNum = GetDrvrRefNum(drvrName);
  2050.  
  2051.     if(refNum == 0)
  2052.         return false;
  2053.  
  2054.     driverHandle = GetDCtlEntry(refNum);
  2055.  
  2056.     if((*driverHandle)->dCtlFlags & dOpened)
  2057.         return true;
  2058.     else
  2059.         return false;
  2060. }
  2061.  
  2062. pr
  2063. -- 
  2064. Pete Resnick - resnick@uiuc.edu
  2065. Doctoral Student - Philosophy Department, UIUC
  2066. Other connections to the world are tenuous at best
  2067.  
  2068. ---------------------------
  2069.  
  2070. >From koops@owlnet.rice.edu (Ryan Richard Koopmans)
  2071. Subject: Quality of Random()
  2072. Date: 13 Jan 1995 02:05:10 GMT
  2073. Organization: Rice University
  2074.  
  2075. How good is the Random() function in ROM?  I set randSeed to
  2076. TickCount, but is that enough?  I'm making heavy use of the
  2077. function, and I'm wondering if it would be good to use my
  2078. own algorthim. 
  2079.  
  2080. Any thoughts?
  2081. -- 
  2082.  
  2083. Ryan Koopmans  koops@owlnet.rice.edu
  2084.  
  2085. +++++++++++++++++++++++++++
  2086.  
  2087. >From rmah@panix.com (Robert Mah)
  2088. Date: Thu, 12 Jan 1995 23:47:34 -0500
  2089. Organization: One Step Beyond
  2090.  
  2091. koops@owlnet.rice.edu (Ryan Richard Koopmans) wrote:
  2092.  
  2093. ) How good is the Random() function in ROM?  I set randSeed to
  2094. ) TickCount, but is that enough?  I'm making heavy use of the
  2095. ) function, and I'm wondering if it would be good to use my own
  2096. ) algorthim. 
  2097.  
  2098. It's fast but not very good.  I believe it uses the simple linear
  2099. congruent method to generate random numbers.  These type of random 
  2100. number generators exhibit a rather short "period" and are also have
  2101. poor k-space distribution.
  2102.  
  2103. However, they are very fast.  If you are not doing simulations work,
  2104. then either Random() nor rand() from the standard C libs should be
  2105. good enough.
  2106.  
  2107. If you feel that you need a more sophisticated algorithm, look in
  2108. the book "Numerical Recepies in C" (or Pascal or Fortran) and you
  2109. will find a chapter describing various random number generators in
  2110. detail, along with their pros and cons.  Knuth also discusses this
  2111. stuff, but I personally find his writing a bit obtuse.
  2112.  
  2113. Don't try to roll your own unless you have a very good background 
  2114. in statistics and numerical methods.  There is a lot of hard found
  2115. magic involved in creating a good random number generator.
  2116.  
  2117. Cheers,
  2118. Rob
  2119. _______________________________________________________________________
  2120. Robert S. Mah        Macintosh Software Development     +1.212.947.6507
  2121. One Step Beyond         and Network Consulting           rmah@panix.com
  2122.  
  2123. +++++++++++++++++++++++++++
  2124.  
  2125. >From rhanks@benchbuilt.com (Rod Hanks)
  2126. Date: 17 Jan 1995 22:18:37 GMT
  2127. Organization: BenchBuilt Software Co.
  2128.  
  2129.  
  2130. How good is Random()?  Its lousy.
  2131.  
  2132. I do a lot of mathematical simulations where I need a good uniform variate.
  2133. Don't even think of using Random() for this.  There is a good algorithm
  2134. in "Numerical Recipes in PASCAL" (which is probably also in "Numerical Recipes
  2135. in C", I program in C but I don't think the C copy was out when I 
  2136. bought it).
  2137.  
  2138. Even with their algorithm, I had to do a little playing with the output to
  2139. make sure I had the same chance of getting a number between 0 and 0.25 as I
  2140. did to get one between 0.75 and 1.0.
  2141.  
  2142. Sorry I don't know the authors off hand, cause they really deserve an Attaboy.
  2143.  
  2144. Anybody interested in doing stuff with numbers on a computer should have this
  2145. book.
  2146.  
  2147. Thanks,
  2148. Rod
  2149.  
  2150. +++++++++++++++++++++++++++
  2151.  
  2152. >From Rick_Holzgrafe@taligent.com (Rick Holzgrafe)
  2153. Date: Fri, 13 Jan 1995 21:14:47 GMT
  2154. Organization: Semicolon Software
  2155.  
  2156. In article <3f4n4m$dcf@larry.rice.edu>, koops@owlnet.rice.edu (Ryan
  2157. Richard Koopmans) wrote:
  2158.  
  2159. > How good is the Random() function in ROM?  I set randSeed to
  2160. > TickCount, but is that enough?
  2161.  
  2162. Robert Mah has already addressed the quality of the algorithm. I just want
  2163. to suggest that you use the return from GetDateTime as your seed instead
  2164. of the return from TickCount. TickCount starts at zero every time you
  2165. restart your Mac, so you have a much greater likelihood (small perhaps,
  2166. but greater nonetheless) of starting from the same seed occasionally.
  2167.  
  2168. -- Rick Holzgrafe, a member of the Taligentsia
  2169.    Rick_Holzgrafe@taligent.com
  2170.    rmh@taligent.com
  2171.  
  2172. +++++++++++++++++++++++++++
  2173.  
  2174. >From howardb@enlil.premenos.com (Howard Berkey)
  2175. Date: 19 Jan 1995 18:48:32 GMT
  2176. Organization: Premenos Corp.
  2177.  
  2178. In article <rmah-1201952347340001@rmah.dialup.access.net>,
  2179. Robert Mah <rmah@panix.com> wrote:
  2180. >koops@owlnet.rice.edu (Ryan Richard Koopmans) wrote:
  2181. >
  2182. >) How good is the Random() function in ROM?  I set randSeed to
  2183. >) TickCount, but is that enough?  I'm making heavy use of the
  2184. >) function, and I'm wondering if it would be good to use my own
  2185. >) algorthim. 
  2186. >
  2187. >It's fast but not very good.  I believe it uses the simple linear
  2188. >congruent method to generate random numbers.  These type of random 
  2189. >number generators exhibit a rather short "period" and are also have
  2190. >poor k-space distribution.
  2191.  
  2192.  
  2193. I would be very surprised if it was anything but a linear congruency
  2194. generator.  While the period is (fairly) short, proper seeding can
  2195. help.  I'm fuzzy on the K-space argument (I'd have to reach for Knuth 
  2196. volume 2 and it's uncivilized to do that before noon :-), but you can
  2197. get at least a reasonable distribution using linear congruent methods 
  2198. with proper seeding.
  2199.  
  2200. >
  2201. >However, they are very fast.  If you are not doing simulations work,
  2202. >then either Random() nor rand() from the standard C libs should be
  2203. >good enough.
  2204. >
  2205.  
  2206. Hmm.  I used Random() several years ago for monte-carlo simulations
  2207. in a Physical Chemistry class and the results were satisfactory.  For
  2208. more sophisticated simulations you're probably right, though.
  2209.  
  2210.  
  2211. >Don't try to roll your own unless you have a very good background 
  2212. >in statistics and numerical methods.  There is a lot of hard found
  2213. >magic involved in creating a good random number generator.
  2214. >
  2215.  
  2216. Like I said, in the past I've been able to make Random() random
  2217. enough.  At least for my academic purposes, that is... 
  2218.  
  2219. True random numbers (i.e. not pseudorandom) would be difficult (almost
  2220. impossible?) although I have heard of some pretty adventurous
  2221. attempts, some involving homebrew hardware additions to the computer. 
  2222.  
  2223.  
  2224. -H-
  2225.  
  2226. -- 
  2227. Howard Berkey                                     howardb@premenos.com
  2228.                    Windows '95 == Macintosh '84        
  2229.  
  2230. +++++++++++++++++++++++++++
  2231.  
  2232. >From rmah@panix.com (Robert Mah)
  2233. Date: Sat, 21 Jan 1995 00:40:41 -0500
  2234. Organization: One Step Beyond
  2235.  
  2236. howardb@enlil.premenos.com (Howard Berkey) wrote:
  2237.  
  2238. ) Robert Mah <rmah@panix.com> wrote:
  2239. )
  2240. ) >koops@owlnet.rice.edu (Ryan Richard Koopmans) wrote:
  2241. ) >
  2242. ) > ) How good is the Random() function in ROM?  I set randSeed to
  2243. ) >
  2244. ) > It's fast but not very good.  I believe it uses the simple linear
  2245. ) > congruent method to generate random numbers.  These type of random 
  2246. ) > number generators exhibit a rather short "period" and are also have
  2247. ) > poor k-space distribution.
  2248. ) I would be very surprised if it was anything but a linear congruency
  2249. ) generator.  While the period is (fairly) short, proper seeding can
  2250. ) help.  I'm fuzzy on the K-space argument (I'd have to reach for Knuth 
  2251. ) volume 2 and it's uncivilized to do that before noon :-), but you can
  2252. ) get at least a reasonable distribution using linear congruent methods 
  2253. ) with proper seeding.
  2254.  
  2255. Say k = 3 (i.e. real space).  Generate a whole bunch of random points
  2256. and plot them in 3-D space.  If the random number generator is "good"
  2257. the points will tend to fill up the space more or less evenly (i.e.
  2258. randomly).  However, the points generated by linear congruent methods
  2259. tend to congregate along k-1 dimensional "planes" (in this case, real
  2260. 2-D planes).
  2261.  
  2262. The number of such planes is dependent upon the choice of constants
  2263. used.  Some generators will see as few as 32 planes or lower.
  2264.  
  2265.  
  2266. But there's yet another problem I forgot about...
  2267.  
  2268. The randomness of the low order bits is often far less than the
  2269. randomness of the number as a whole.  Therefore doing things like...
  2270.  
  2271.   n = Random() % 10 
  2272.  
  2273. will not yield very random results.  Instead you should try something
  2274. like...
  2275.  
  2276.   n = 1 + ( 10L * (long)Random() / (kMaxRand + 1) )
  2277.  
  2278. I only know this semi-useless trivia because I was forced to take
  2279. two (three? four?) classes on this "stuff" in school.
  2280.  
  2281.  
  2282. ) True random numbers (i.e. not pseudorandom) would be difficult (almost
  2283. ) impossible?) although I have heard of some pretty adventurous
  2284. ) attempts, some involving homebrew hardware additions to the computer. 
  2285.  
  2286. I recall a book I read way back when, about an underground group that 
  2287. made "true" random number generators using specialized hardware.  They
  2288. used this device to outguess laser satalites that tried to zap chip
  2289. smugglers as they drove their souped up cars in the Texas desert.  It 
  2290. turned out to be a government (or corporate?) plot of some sort...
  2291.  
  2292. Creating a true random number generator using turing machines (i.e.
  2293. digital computers) is impossible.
  2294.  
  2295. Cheers,
  2296. Rob
  2297. _______________________________________________________________________
  2298. Robert S. Mah        Macintosh Software Development     +1 212 947 6507
  2299. One Step Beyond         and Network Consulting           mah@panix.com
  2300.  
  2301. +++++++++++++++++++++++++++
  2302.  
  2303. >From ruhl@phoebe.cair.du.edu (Robert A. Uhl)
  2304. Date: 23 Jan 1995 09:04:21 GMT
  2305. Organization: University of Denver
  2306.  
  2307. In article <rmah-2101950040410001@rmah.dialup.access.net>,
  2308. Robert Mah <rmah@panix.com> wrote:
  2309. >Creating a true random number generator using turing machines (i.e.
  2310. >digital computers) is impossible.
  2311.  
  2312.   Actually, it is possible if one hooks up certain op-amps in such a
  2313. fashion as to generate a chaotic sequence. With the right feedback loops
  2314. and A/D conversions, the numbers therefrom are as random as they get.
  2315. Well, they _are_ chaotic, but it is close enough to random for
  2316. _anything_ that you will be using it for.
  2317.  
  2318. -- 
  2319. - ------------------------------------------------------------------------
  2320. | Bob Uhl | Spectre                  | `In touto nika' +                 |
  2321. | U of D  | Baron Robert von Raetzin | http://mercury.cair.du.edu/~ruhl/ |
  2322. - ------------------------------------------------------------------------
  2323.  
  2324. +++++++++++++++++++++++++++
  2325.  
  2326. >From sw@network-analysis-ltd.co.uk (Sak Wathanasin)
  2327. Date: Mon, 23 Jan 95 01:39:37 GMT
  2328. Organization: Network Analysis Ltd
  2329.  
  2330.  
  2331. In article <dlakelan.790448207@las1.iastate.edu> (comp.sys.mac.programmer), 
  2332. dlakelan@iastate.edu (Dan Lakeland) writes:
  2333.  
  2334. > Hmm, I thought Random() was supposed to be fairly good (the QD macintosh
  2335. > version). But of course most people don't need a very good random number
  2336. > generator. 
  2337.  
  2338. It's reasonable: it's the same LCG that is described as a "minimal standard" in 
  2339. the Parks and Miller paper in CACM vol 31 no 10.  It's good enough for general 
  2340. use, but of course, "mathematical simulations where I need a good uniform variate" 
  2341. doesn't fall into this category.
  2342.  
  2343. Sak Wathanasin
  2344. Network Analysis Limited
  2345. 178 Wainbody Ave South, Coventry CV3 6BX, UK
  2346.  
  2347. Internet: sw@network-analysis-ltd.co.uk 
  2348. uucp:     ...!uknet!nan!sw                       AppleLink: NAN.LTD
  2349. Phone: (+44) 203 419996 Mobile:(+44) 850 587411  Fax: (+44) 203 690690
  2350.  
  2351. +++++++++++++++++++++++++++
  2352.  
  2353. >From rmah@panix.com (Robert Mah)
  2354. Date: Thu, 26 Jan 1995 23:27:49 -0500
  2355. Organization: One Step Beyond
  2356.  
  2357. etraut@apple.com (Eric Traut) wrote:
  2358.  
  2359. ) > > How good is Random()?
  2360. ) The original author of Random() decided it would return numbers in the
  2361. ) range -32767 to 32767. The algorithm used internally to generate
  2362. ) pseudo-random numbers generates a 16-bit quantity. Since this quantity
  2363. ) could be outside the specified range (i.e. it could be -32768), the
  2364. ) routine was coded to simply return zero in this case.
  2365.  
  2366. Lars Farm <Lars.Farm@nts.mh.se> wrote that he read a paper written by the
  2367. folks who wrote Random() that said that it worked internally with long
  2368. int's and simply returned the low order word.
  2369.  
  2370. >From a quick scan of the 68K assembly for _Random there's a lot of word
  2371. swapping and such going on, which I assume is to handle longword multiplies
  2372. on the 68000.  This supports Lars.  However, it does indead do an explicit
  2373. check for -32768 at the end (this strikes me as sort of funny).
  2374.  
  2375. Could you please clarify for those of us who are curious?
  2376.  
  2377.  
  2378. ) When we ported Random() to C last year (so it could be compiled for
  2379. ) PowerPC), we were tempted to change the algorithm to fix the problem, but
  2380. ) decided not to for compatibility reasons.
  2381.  
  2382. Are you being serious here?  Did anyone REALLY rely upon the a certain
  2383. sequence of values from Random()?  And was it Microsoft?
  2384.  
  2385. Cheers,
  2386. Rob
  2387. _______________________________________________________________________
  2388. Robert S. Mah        Macintosh Software Development     +1 212 947 6507
  2389. One Step Beyond         and Network Consulting           mah@panix.com
  2390.  
  2391. +++++++++++++++++++++++++++
  2392.  
  2393. >From etraut@apple.com (Eric Traut)
  2394. Date: 25 Jan 1995 07:23:18 GMT
  2395. Organization: Apple Computer, Inc.
  2396.  
  2397. >>How good is Random()?
  2398.  
  2399. The Random() function implemented in QuickDraw does a pretty good job at
  2400. random number generation. However, it has one flaw which prevents it from
  2401. generating a good random distribution. The original author of Random()
  2402. decided it would return numbers in the range -32767 to 32767. The algorithm
  2403. used internally to generate pseudo-random numbers generates a 16-bit
  2404. quantity. Since this quantity could be outside the specified range (i.e. it
  2405. could be -32768), the routine was coded to simply return zero in this case.
  2406. That means that Random() is twice as likely to return zero than any other
  2407. number.
  2408.  
  2409. When we ported Random() to C last year (so it could be compiled for
  2410. PowerPC), we were tempted to change the algorithm to fix the problem, but
  2411. decided not to for compatibility reasons.
  2412.  
  2413. Eric Traut
  2414. MacOS Engineer
  2415. Apple Computer, Inc.
  2416.  
  2417. +++++++++++++++++++++++++++
  2418.  
  2419. >From dlakelan@iastate.edu (Dan Lakeland)
  2420. Date: 28 Jan 95 17:56:36 GMT
  2421. Organization: Iowa State University, Ames, Iowa
  2422.  
  2423. In <3fvrel$nme@cassandra.cair.du.edu> ruhl@phoebe.cair.du.edu (Robert A. Uhl) writes:
  2424.  
  2425. >In article <rmah-2101950040410001@rmah.dialup.access.net>,
  2426. >Robert Mah <rmah@panix.com> wrote:
  2427. >>Creating a true random number generator using turing machines (i.e.
  2428. >>digital computers) is impossible.
  2429.  
  2430. >  Actually, it is possible if one hooks up certain op-amps in such a
  2431. >fashion as to generate a chaotic sequence. With the right feedback loops
  2432. >and A/D conversions, the numbers therefrom are as random as they get.
  2433. >Well, they _are_ chaotic, but it is close enough to random for
  2434. >_anything_ that you will be using it for.
  2435.  
  2436. Op amps are of course ANALOG devices, but anyway, what exact circuit or
  2437. type of circuit are you talking about? I've tried to think of one that
  2438. produces a chaotic waveform, but I haven't got any ideas yet.
  2439.  
  2440. -- 
  2441. Daniel Lakeland: Macintosh Hacker, Mathematics Major, NRA Member.
  2442. If you want peace, work for justice. If you want prosperity, work for
  2443. free markets, if you want to write Mac software, you're outta luck.
  2444.  
  2445. +++++++++++++++++++++++++++
  2446.  
  2447. >From dlakelan@iastate.edu (Dan Lakeland)
  2448. Date: 28 Jan 95 18:02:14 GMT
  2449. Organization: Iowa State University, Ames, Iowa
  2450.  
  2451.  
  2452. Is there an ANSI standard for the algorithm used in the ansi rand()
  2453. function? it's probably linear congruential as well, seems like everyone
  2454. uses that method.
  2455.  
  2456. What algorithm does Metrowerks use in their implementation of rand()??
  2457.  
  2458. thanks
  2459.  
  2460. -- 
  2461. Daniel Lakeland: Macintosh Hacker, Mathematics Major, NRA Member.
  2462. If you want peace, work for justice. If you want prosperity, work for
  2463. free markets, if you want to write Mac software, you're outta luck.
  2464.  
  2465. +++++++++++++++++++++++++++
  2466.  
  2467. >From bobp@ep.mey.nl (Bob Polis)
  2468. Date: Mon, 30 Jan 1995 12:18:02 GMT
  2469. Organization: Moret Ernst & Young
  2470.  
  2471. In article <dlakelan.791315796@las1.iastate.edu>, dlakelan@iastate.edu
  2472. (Dan Lakeland) wrote:
  2473.  
  2474. > Op amps are of course ANALOG devices, but anyway, what exact circuit or
  2475. > type of circuit are you talking about? I've tried to think of one that
  2476. > produces a chaotic waveform, but I haven't got any ideas yet.
  2477.  
  2478. Ten years ago I built two hardware random generators to hook up to my old
  2479. Z80 computer. My main drive to do this was raw speed. Using hardware
  2480. enabled me to get random numbers some 40 times faster than using the OS's
  2481. random routine.
  2482.  
  2483. One was an analog white noise generator, which is a circuit used in old
  2484. analog music synthesizers. It usually depends on some physical behavior of
  2485. a 'misused' transistor. This transistor will then generate some chaotic
  2486. signal, which has to be amplified using an opamp. The resulting signal's
  2487. spectrum is uniformly distributed between some lowest and highest
  2488. frequency. Using this signal in a computer via an A/D-convertor will yield
  2489. random numbers. Of course, the problem with this type of circuit is, that
  2490. you cannot precisely determine the distibution, which is also somewhat
  2491. dependent on environmental circumstances.
  2492.  
  2493. The other was a hardware implementation of the well-known
  2494. shift-register-based generator. Since it would be clocked by some simple
  2495. clock circuit (not even using a crystal), it would have no relationship
  2496. with the computer's clock whatsoever. This circuit also has the
  2497. disadvantage that you cannot predict the distribution exactly, because of
  2498. possible nasty ratios between the generator's clock and that of your
  2499. computer.
  2500.  
  2501. All in all, these circuit are (also) far from perfect, but are very fast
  2502. (you need _one_ memory or I/O-read to obtain a random number), and well
  2503. suited for audio/music noise applications.
  2504.  
  2505. -- 
  2506. Bob Polis
  2507. bobp@ep.mey.nl (Changed since October 17, 1994!)
  2508. Moret Ernst & Young, The Netherlands
  2509.  
  2510. +++++++++++++++++++++++++++
  2511.  
  2512. >From bhowes@cssun3.mot.com (Brad Howes)
  2513. Date: 30 Jan 1995 16:21:17 GMT
  2514. Organization: Motorola Corporate Computer Services
  2515.  
  2516. In article <etraut-240195231857@mac1004.kip.apple.com>, etraut@apple.com (Eric Traut) writes:
  2517.  
  2518. >>> How good is Random()?
  2519. ET> The Random() function implemented in QuickDraw does a pretty good job at
  2520. ET> random number generation. However, it has one flaw which prevents it from
  2521. ET> generating a good random distribution. The original author of Random()
  2522. ET> decided it would return numbers in the range -32767 to 32767. The algorithm
  2523. ET> used internally to generate pseudo-random numbers generates a 16-bit
  2524. ET> quantity. Since this quantity could be outside the specified range (i.e. it
  2525. ET> could be -32768), the routine was coded to simply return zero in this case.
  2526. ET> That means that Random() is twice as likely to return zero than any other
  2527. ET> number.
  2528.  
  2529. Also, I have seen code that attempts to limit the random number as follows:
  2530.  
  2531.    a = (unsigned long )Random() % MAX_VALUE_MINUS_1;
  2532.    // ...or even...
  2533.    a = (unsigned long )Random() & MAX_POWER_OF_2_VALUE_MINUS_1;
  2534.  
  2535. Unfortunately, for linear congruential generators, the above actions can
  2536. destroy the generator's long random sequence, and reveal non-random sequences
  2537. or cycles present in the low digits. See Sedgewick's _Algorithms in C_, pg 513
  2538. for bad/good examples.
  2539.  
  2540. Brad
  2541.  
  2542. -- 
  2543. +---------------------------------------------------------------------------+
  2544. | Brad Howes                       | Motorola E-Mail: XBH001                |
  2545. | Distributed Systems Applications | Internet: bhowes@mot.com               |
  2546. | Motorola Corporate Computer Svcs |           xbh001@email.mot.com         |
  2547. | Scottsdale, AZ                   | Voice: 602 441 1522  Fax: 602 441 5455 |
  2548. | USA                              | Pager: 800 SKY PAGE  PIN: 1254799      |
  2549. +---------------------------------------------------------------------------+
  2550.  
  2551.  
  2552. +++++++++++++++++++++++++++
  2553.  
  2554. >From ruhl@phoebe.cair.du.edu (Robert A. Uhl)
  2555. Date: 30 Jan 1995 18:22:51 GMT
  2556. Organization: University of Denver
  2557.  
  2558. In article <dlakelan.791315796@las1.iastate.edu>,
  2559. Dan Lakeland <dlakelan@iastate.edu> wrote:
  2560. >In <3fvrel$nme@cassandra.cair.du.edu> ruhl@phoebe.cair.du.edu (Robert A. Uhl) writes:
  2561. >
  2562. >Op amps are of course ANALOG devices, but anyway, what exact circuit or
  2563. >type of circuit are you talking about? I've tried to think of one that
  2564. >produces a chaotic waveform, but I haven't got any ideas yet.
  2565.  
  2566.   It's in an old issue of Scientific American. Don't have the month/year
  2567. on me right now, but it was The Amateur Scientist, discussing a chaotic
  2568. encryption method. Quite nice, actually.
  2569.  
  2570.  
  2571. -- 
  2572. - ------------------------------------------------------------------------
  2573. | Bob Uhl | Spectre                  | `In touto nika' +                 |
  2574. | U of D  | Baron Robert von Raetzin | http://mercury.cair.du.edu/~ruhl/ |
  2575. - ------------------------------------------------------------------------
  2576.  
  2577. ---------------------------
  2578.  
  2579. >From nhiggins@cln.etc.bc.ca (Nigel Higgins)
  2580. Subject: Tip Of the Month: Transparent PICTs
  2581. Date: Sun, 22 Jan 1995 00:53:44 GMT
  2582. Organization: The Education Technology Centre of British Columbia. (Canada)
  2583.  
  2584.  
  2585. A while back there was a discussion on how to draw PICTs onto the screen 
  2586. so that any white areas of the PICT would become transparent and not 
  2587. cover up things in the background.
  2588.  
  2589. There were many suggestions made, from using GWolrds and CopyMask, to 
  2590. transparent modes, etc... but here is the simplest way I have found that 
  2591. works. It requires no added source. You can draw the PICTs just like any 
  2592. other PICTs.
  2593.  
  2594. All you need is a copy of the commercial version of Kid Pix (broderbund)
  2595. Take the PICt you wish to draw transparent, paste it into Kid Pix, select 
  2596. it again and copy it. Then add it to your project resource fork. I have 
  2597. no idea how it works or what Kid Pix does, but it works just fine. The 
  2598. PICT will draw in your program just as always, but any white pixels will 
  2599. become transparent.
  2600.  
  2601. Pretty cool eh?
  2602.  
  2603. +------------------------------------------------------------------------+
  2604. |Aaron Davidson        |I've told you a *million* times not to exagerate!|
  2605. |Regulus240@aol.com    |-------------------------------------------------+
  2606. |Silicon Creek Software|      Box 246, Kamloops BC, Canada, V2C 5K6      |
  2607. +------------------------------------------------------------------------+
  2608.  
  2609.  
  2610. +++++++++++++++++++++++++++
  2611.  
  2612. >From scf@w0x0f.com (Steve Fenwick)
  2613. Date: Fri, 27 Jan 1995 23:26:41 -0800
  2614. Organization: a2i network
  2615.  
  2616. In article <1995Jan22.005344.20692@news.etc.bc.ca>, nhiggins@cln.etc.bc.ca
  2617. (Nigel Higgins) wrote:
  2618.  
  2619. > A while back there was a discussion on how to draw PICTs onto the screen 
  2620. > so that any white areas of the PICT would become transparent and not 
  2621. > cover up things in the background.
  2622. [KidPict copy-paste-copy method]
  2623. > Pretty cool eh?
  2624.  
  2625. Yup. This also works with Studio/8, which also has some
  2626. other great features, like a floating palette with cursor
  2627. position reporting and click-drag box sizing, which is
  2628. very handy for finding the dimensions of a picture.
  2629.  
  2630. Steve
  2631.  
  2632. -- 
  2633. Steve Fenwick                                         scf@w0x0f.com
  2634.  
  2635. +++++++++++++++++++++++++++
  2636.  
  2637. >From D.Birnie@Regy.Canterbury.ac.NZ (Denis Birnie)
  2638. Date: Sun, 29 Jan 1995 09:37:53 +1200
  2639. Organization: Information Services, University of Canterbury
  2640.  
  2641. >> A while back there was a discussion on how to draw PICTs onto the screen 
  2642. >> so that any white areas of the PICT would become transparent and not 
  2643. >> cover up things in the background.
  2644. >
  2645. >This also works with Studio/8, which also has some
  2646. >other great features, like a floating palette with cursor
  2647. >position reporting and click-drag box sizing, which is
  2648. >very handy for finding the dimensions of a picture.
  2649. >
  2650. For finding the dimensions of a picture the new Scrapbook that comes with
  2651. System 7.5 is quite good - it displays the dimensions and (rsrc) size of
  2652. the images.  Sure beats counting pixels!
  2653.  
  2654. Denis
  2655. -- 
  2656. The above in no way reflects the opinion or standards of...
  2657.  - the University of Canterbury
  2658.  - the doctors who give me my medication
  2659.  - myself, five minutes from now, then, tomorrow or yesterday...
  2660.                               (depending on your timezone :-)
  2661. - --
  2662.  
  2663. ---------------------------
  2664.  
  2665. >From dlakelan@iastate.edu (Dan Lakeland)
  2666. Subject: True RANDOM numbers, (was Re: Quality of Random())
  2667. Date: 19 Jan 95 18:54:12 GMT
  2668. Organization: Iowa State University, Ames, Iowa
  2669.  
  2670. As long as we're on the topic of random numbers, anyone have an idea for
  2671. a good electronic true-random-number dongle you could plug into the back
  2672. of your mac? Preferably non-radioactive...
  2673.  
  2674. for example, I've thought about tuning an AM reciever to some random
  2675. frequency, and reading the (scaled) voltage level w/ an 8 bit A/D
  2676. converter every few milliseconds.
  2677. -- 
  2678. Daniel Lakeland: Macintosh Hacker, Mathematics Major, NRA Member.
  2679. If you want peace, work for justice. If you want prosperity, work for
  2680. free markets, if you want to write Mac software, you're outta luck.
  2681.  
  2682. +++++++++++++++++++++++++++
  2683.  
  2684. >From keniwasa@wam.umd.edu (Ken Iwasa)
  2685. Date: 22 Jan 1995 03:57:55 GMT
  2686. Organization: University of Maryland, College Park
  2687.  
  2688. In article <dlakelan.790541652@las1.iastate.edu>,
  2689. Dan Lakeland <dlakelan@iastate.edu> wrote:
  2690. >As long as we're on the topic of random numbers, anyone have an idea for
  2691. >a good electronic true-random-number dongle you could plug into the back
  2692. >of your mac? Preferably non-radioactive...
  2693. >
  2694. >for example, I've thought about tuning an AM reciever to some random
  2695. >frequency, and reading the (scaled) voltage level w/ an 8 bit A/D
  2696. >converter every few milliseconds.
  2697.  
  2698. But how would you pick this "random frequency"?  :)
  2699.  
  2700. >-- 
  2701. >Daniel Lakeland: Macintosh Hacker, Mathematics Major, NRA Member.
  2702. >If you want peace, work for justice. If you want prosperity, work for
  2703. >free markets, if you want to write Mac software, you're outta luck.
  2704.  
  2705. Ken
  2706.  
  2707. +++++++++++++++++++++++++++
  2708.  
  2709. >From jegelhof@cloud9.net (James Egelhof)
  2710. Date: Sun, 22 Jan 1995 18:25:35 -0500
  2711. Organization: Cloud 9 Internet * White Plains, NY USA
  2712.  
  2713. In article <3fsl43$nvt@cville-srv.wam.umd.edu>, keniwasa@wam.umd.edu (Ken 
  2714. Iwasa) writes:
  2715. > >for example, I've thought about tuning an AM reciever to some random 
  2716. > >frequency, and reading the (scaled) voltage level w/ an 8 bit A/
  2717. > >D converter every few milliseconds. 
  2718. >  
  2719. > But how would you pick this "random frequency"?  :) 
  2720.  
  2721. Y'know, there's a point where the numbers are just so damned close to random 
  2722. that we can call them random and nobody will care.
  2723.  
  2724.  
  2725. - -
  2726.  
  2727.  -----------------------------------------------------------------------
  2728.  James M. Egelhof       Finger for PGP Public Key |  jegelhof@cloud9.net
  2729.  Opinions are mine alone - not even my hamsters'. |   jegelhof@panix.com
  2730.  Welcome to the "Information Superhighway"...     |     jegelhof@aol.com
  2731.                      AOL users, stay to the right!|           james@home
  2732.  -----------------------------------------------------------------------
  2733.  
  2734.  
  2735. +++++++++++++++++++++++++++
  2736.  
  2737. >From rmah@panix.com (Robert Mah)
  2738. Date: Mon, 23 Jan 1995 11:53:29 -0500
  2739. Organization: One Step Beyond
  2740.  
  2741. jegelhof@cloud9.net (James Egelhof) wrote:
  2742.  
  2743. ) keniwasa@wam.umd.edu (Ken Iwasa) writes:
  2744. )
  2745. ) > > for example, I've thought about tuning an AM reciever to some 
  2746. ) > > random frequency, and reading the (scaled) voltage level w/ an
  2747. ) >  
  2748. ) > But how would you pick this "random frequency"?  :) 
  2749. ) Y'know, there's a point where the numbers are just so damned close 
  2750. ) to random that we can call them random and nobody will care.
  2751.  
  2752. Depends upon the application now, doesn't it?  For games, school
  2753. projects, small business models, rand() and Random() are probably
  2754. OK.  But if you're modeling air traffic control systems, nuclear
  2755. power plants, etc. -- well, I think you'd better look into other
  2756. algorithms.
  2757.  
  2758. Cheers,
  2759. Rob
  2760. _______________________________________________________________________
  2761. Robert S. Mah        Macintosh Software Development     +1 212 947 6507
  2762. One Step Beyond         and Network Consulting           mah@panix.com
  2763.  
  2764. +++++++++++++++++++++++++++
  2765.  
  2766. >From Lars.Farm@nts.mh.se (Lars Farm)
  2767. Date: Tue, 24 Jan 1995 14:32:31 +0100
  2768. Organization: Mid Sweden University
  2769.  
  2770. In article <rmah-2301951153290001@rmah.dialup.access.net>, rmah@panix.com
  2771. (Robert Mah) wrote:
  2772.  
  2773. > Depends upon the application now, doesn't it?  For games, school
  2774. > projects, small business models, rand() and Random() are probably
  2775. > OK.  But if you're modeling air traffic control systems, nuclear
  2776. > power plants, etc. -- well, I think you'd better look into other
  2777. > algorithms.
  2778.  
  2779. The toolbox Random() is Park and Millers "minimal standard" rng described
  2780. in CACM-10 1988, p1192-1201. "Random Number Generators: Good ones are hard
  2781. to find". You must use the rand seed for value not the Random() result.
  2782. The initial seed must be 1 <= seed < 2^31-1. Their claim is that it's
  2783. fast, small, has full period (produces all values between 1 and 2^31-1)
  2784. and is "random". Not knowing too much about random number generators, I'd
  2785. like to learn: In what way is this generator not good?
  2786.  
  2787. Lars
  2788.  
  2789. -- 
  2790. Lars.Farm@nts.mh.se
  2791.  
  2792. +++++++++++++++++++++++++++
  2793.  
  2794. >From rmah@panix.com (Robert Mah)
  2795. Date: Tue, 24 Jan 1995 14:05:03 -0500
  2796. Organization: One Step Beyond
  2797.  
  2798. Lars.Farm@nts.mh.se (Lars Farm) wrote:
  2799.  
  2800. ) rmah@panix.com (Robert Mah) wrote:
  2801. ) > Depends upon the application now, doesn't it?  For games, school
  2802. ) > projects, small business models, rand() and Random() are probably
  2803. ) > OK.  But if you're modeling air traffic control systems, nuclear
  2804. ) > power plants, etc. -- well, I think you'd better look into other
  2805. ) > algorithms.
  2806. ) The toolbox Random() is Park and Millers "minimal standard" rng
  2807. ) described in CACM-10 1988, p1192-1201. "Random Number Generators: Good
  2808. ) ones are hard to find".
  2809.  
  2810. I'm afraid I haven't read that paper.
  2811.  
  2812.  
  2813. ) You must use the rand seed for value not the Random() result.  The
  2814. ) initial seed must be 1 <= seed < 2^31-1. Their claim is that it's
  2815. ) fast, small, has full period (produces all values between 1 and 2^31-1)
  2816. ) and is "random". Not knowing too much about random number generators,
  2817. ) I'd like to learn: In what way is this generator not good?
  2818.  
  2819. I always just assumed that Random() uses the Linear Congruential method.
  2820. If so, then no matter what the multiplier and increment are, it will
  2821. still have poor k-space distribution and the low order bits won't be as
  2822. random as the whole number.  See my other posts on this topic for more
  2823. details.
  2824.  
  2825. If it is a linear congruential generator, I don't see how using the seed
  2826. instead of the function's result (which is probably just the hi or low
  2827. word of the seed) would solve these problems.  On the other hand, maybe
  2828. they don't use a strait linear congruential method.  In that case, every-
  2829. thing above is sort of irrelivant (sp?).
  2830.  
  2831. Could you describe the algorithm they use in their paper?  Or is does
  2832. the paper mostly cover choosing "proper" values for the multiplier and 
  2833. increment along with analysis of these choices?
  2834.  
  2835. Cheers,
  2836. Rob
  2837. _______________________________________________________________________
  2838. Robert S. Mah        Macintosh Software Development     +1 212 947 6507
  2839. One Step Beyond         and Network Consulting           mah@panix.com
  2840.  
  2841. +++++++++++++++++++++++++++
  2842.  
  2843. >From jim.banner@hermes.ces.wa.com (Jim Banner)
  2844. Date: Mon, 23 Jan 95 23:09:00 -0800
  2845. Organization: CES Internet Gateway
  2846.  
  2847. DL> As long as we're on the topic of random numbers, anyone have an idea for
  2848. DL> a good electronic true-random-number dongle you could plug into the back
  2849. DL> of your mac? Preferably non-radioactive...
  2850.  
  2851. Sentinel EvE hardware keys have built-in random number generators...
  2852.  
  2853.  
  2854.  
  2855.  
  2856. +++++++++++++++++++++++++++
  2857.  
  2858. >From zalman@adobe.com (Zalman Stern)
  2859. Date: Wed, 25 Jan 1995 08:16:18 GMT
  2860. Organization: Adobe Systems Incorporated
  2861.  
  2862. In article <dlakelan.790541652@las1.iastate.edu>, dlakelan@iastate.edu
  2863. (Dan Lakeland) wrote:
  2864. > As long as we're on the topic of random numbers, anyone have an idea for
  2865. > a good electronic true-random-number dongle you could plug into the back
  2866. > of your mac? Preferably non-radioactive...
  2867. > for example, I've thought about tuning an AM reciever to some random
  2868. > frequency, and reading the (scaled) voltage level w/ an 8 bit A/D
  2869. > converter every few milliseconds.
  2870.  
  2871. You might want to look into Johnson noise or and Shot noise. Johnson noise
  2872. occurs as a variation in voltage across a resistor. Shot noise is a
  2873. variation in current amplitude that occurs in any conductor. Both are the
  2874. direct result of basic physical phenomena, e.g. Shot noise results from
  2875. the discrete nature of electrons in a current flow. Both forms are white
  2876. (equal energy distribution across the spectrum) and have Gaussian
  2877. distribution on their "values." In other words, they are very high quality
  2878. random noise for a lot of purposes. The only problem is designing a
  2879. detector that can take advantage of these phenomena as the detector itself
  2880. will experience these types of noise. But there may be ways around that.
  2881. See _The _Art_Of_Electronics_ by Horowitz and Hill for an intro on this. I
  2882. suppose one could take advantage of metastable states in a flip-flop as
  2883. well, but I'm not sure about that.
  2884.  
  2885. Another possibility is to sample a very fast clock at a much lower
  2886. frequency which is not quite deterministic. This technique is used to
  2887. accomplish "random TLB" replacement in the MIPS R-Series microprocessors.
  2888. There is a "random" register which increments every clock cycle and wraps
  2889. around at the maximum TLB index. There is a TLB write random instructions
  2890. that replaces the TLB entry indexed by the random register. The random
  2891. register itself cannot be used to make a good random number generator of
  2892. course as the number of cycles in a loop reading that register would be
  2893. quite deterministic. Also, "random replacement" is implemented in certain
  2894. set-associative caches. The latest ARM chips use this I believe. (I do not
  2895. know the circuit details or how good the randomness is.)
  2896.  
  2897. (I've set the followup to sci.electronics as that seems a better place for
  2898. discussing electronic noise, the physical phenomena not the genre of music
  2899. of course. For info on random cache replacement circuitry, try comp.lsi.)
  2900.  
  2901. Zalman Stern               zalman@adobe.com                 (415) 962 3824
  2902. Adobe Systems, 1585 Charleston Rd., POB 7900, Mountain View, CA 94039-7900
  2903. Bicycling, skating, and love all require falling with confidence and grace.
  2904.  
  2905. +++++++++++++++++++++++++++
  2906.  
  2907. >From h+@metrowerks.com (Jon W{tte)
  2908. Date: Wed, 25 Jan 1995 10:29:46 +0100
  2909. Organization: The Conspiracy
  2910.  
  2911. In article <rmah-2301951153290001@rmah.dialup.access.net>,
  2912. rmah@panix.com (Robert Mah) wrote:
  2913.  
  2914. >) Y'know, there's a point where the numbers are just so damned close 
  2915. >) to random that we can call them random and nobody will care.
  2916. >
  2917. >Depends upon the application now, doesn't it?  For games, school
  2918. >projects, small business models, rand() and Random() are probably
  2919. >OK.  But if you're modeling air traffic control systems, nuclear
  2920. >power plants, etc. -- well, I think you'd better look into other
  2921. >algorithms.
  2922.  
  2923. FM interstation noise is VEERY white, more so than AM noise. 
  2924. And you can easily detect whether you have a carrier or not 
  2925. with FM. The rest is left as an excercise for the EE types.
  2926.  
  2927. Cheers
  2928.  
  2929.                                         / h+
  2930.  
  2931.  
  2932. --
  2933.   Jon Wdtte (h+@metrowerks.com), Hagagatan 1, 113 48 Stockholm, Sweden
  2934.  
  2935. "My pad of paper is not backlit."
  2936.       Greg King
  2937.  
  2938.  
  2939. +++++++++++++++++++++++++++
  2940.  
  2941. >From Lars.Farm@nts.mh.se (Lars Farm)
  2942. Date: Thu, 26 Jan 1995 13:44:28 +0100
  2943. Organization: Mid Sweden University
  2944.  
  2945. In article <rmah-2401951405030001@rmah.dialup.access.net>, rmah@panix.com
  2946. (Robert Mah) wrote:
  2947.  
  2948. > I always just assumed that Random() uses the Linear Congruential method.
  2949.  
  2950. It does.
  2951.  
  2952. > If so, then no matter what the multiplier and increment are, it will
  2953. > still have poor k-space distribution and the low order bits won't be as
  2954. > random as the whole number.  See my other posts on this topic for more
  2955. > details.
  2956.  
  2957. I'll see if I can find your post. "k-space" where can I read up on that?
  2958. Knuth? Sedgewick doesn't mention "k-space". As for randomness of low order
  2959. bits, that's one of the things P&M talk about.
  2960.  
  2961. > If it is a linear congruential generator, I don't see how using the seed
  2962. > instead of the function's result (which is probably just the hi or low
  2963. > word of the seed) would solve these problems.
  2964.  
  2965. Uhm, I'm the one asking here;-) I'm no expert on random numbers. Just
  2966. trying to learn. Random() returns the low word of the actual result stored
  2967. in randseed giving diffrent distribution and shorter period than intended.
  2968.  
  2969. >  On the other hand, maybe
  2970. > they don't use a strait linear congruential method.  In that case, every-
  2971. > thing above is sort of irrelivant (sp?).
  2972. > Could you describe the algorithm they use in their paper?
  2973.  
  2974. It's a long time since I read the paper. The rng is a straight MLCG with
  2975. carefully choosen constants, giving good randomness and full period (every
  2976. value>0 representable in a long). If this really is good or bad I don't
  2977. know, that's why I asked.
  2978.  
  2979. >  Or is does
  2980. > the paper mostly cover choosing "proper" values for the multiplier and 
  2981. > increment along with analysis of these choices?
  2982.  
  2983. Yes + choice of initial seed (sum: if the rng is ok it doesn't matter any
  2984. value in the sequence will do) + analysis of several common rngs (rand())
  2985. and their faults.
  2986.  
  2987. Lars
  2988.  
  2989. -- 
  2990. Lars.Farm@nts.mh.se
  2991.  
  2992. +++++++++++++++++++++++++++
  2993.  
  2994. >From Scott Hutinger <S-Hutinger@bgu.edu>
  2995. Date: 27 Jan 1995 17:45:10 GMT
  2996. Organization: Macomb Projects
  2997.  
  2998. In article <Lars.Farm-2601951344280001@sleipner.nts.mh.se> Lars Farm,
  2999. Lars.Farm@nts.mh.se writes:
  3000. >Uhm, I'm the one asking here;-) I'm no expert on random numbers. Just
  3001. >trying to learn. Random() returns the low word of the actual result
  3002. stored
  3003. >in randseed giving diffrent distribution and shorter period than
  3004. intended.
  3005. >
  3006. >>  On the other hand, maybe
  3007. >> they don't use a strait linear congruential method.  In that case,
  3008. every-
  3009. >> thing above is sort of irrelivant (sp?).
  3010. >> 
  3011. >> Could you describe the algorithm they use in their paper?
  3012. >
  3013. >It's a long time since I read the paper. The rng is a straight MLCG with
  3014. >carefully choosen constants, giving good randomness and full period
  3015. (every
  3016. >value>0 representable in a long). If this really is good or bad I don't
  3017. >know, that's why I asked.
  3018. >
  3019. >>  Or is does
  3020. >> the paper mostly cover choosing "proper" values for the multiplier and 
  3021. >> increment along with analysis of these choices?
  3022. >
  3023. >Yes + choice of initial seed (sum: if the rng is ok it doesn't matter any
  3024. >value in the sequence will do) + analysis of several common rngs (rand())
  3025. >and their faults.
  3026.  
  3027. I am sure that the folks from Apple, do have quite a bit of stats on
  3028. Random(),  along with more information that would be useful everyone. 
  3029. It's not like many of us have the time when wanting to use Random() to
  3030. check all seeding variations, then see whats best.  But, if we knew what
  3031. were best...
  3032.  
  3033. Possibly they could be of some help in this situation?
  3034.  
  3035. I must have had problems with my seeds, as I could look at the numbers
  3036. and notice stipes within them.  I realize the other problems I could
  3037. incorporate to give me poor distribution.  
  3038.  
  3039. BTW k is just one of those terms some madman termed.
  3040.  
  3041. I think I should go look up the 1988 volume, as I don't have that
  3042. floating on my shelf.   Thats just one more good reason not to code today
  3043. :-)
  3044.  
  3045. S-Hutinger@bgu.edu
  3046. -- procrastinating finishing my code by reading newsgroups :-)
  3047.  
  3048. +++++++++++++++++++++++++++
  3049.  
  3050. >From eric.hegstrom@3do.com (Eric Hegstrom)
  3051. Date: 27 Jan 1995 17:18:00 GMT
  3052. Organization: 3DO Company
  3053.  
  3054. In article <9501221825.AA35339@jegelhof.dialup.cloud9.net>
  3055. jegelhof@cloud9.net (James Egelhof) writes:
  3056.  
  3057. > > >for example, I've thought about tuning an AM reciever to some random 
  3058. > > >frequency, and reading the (scaled) voltage level w/ an 8 bit A/
  3059. > > >D converter every few milliseconds. 
  3060. > >  
  3061. > > But how would you pick this "random frequency"?  :) 
  3062.  
  3063. I once proposed a siliar idea but a few people pointed out to me that
  3064. because of man-made interference and lightning strikes etc., the
  3065. "static" wouldn't be truly random. I always liked the idea though.
  3066.  
  3067. -Eric
  3068.  
  3069. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  3070. This in no way represents the opinion of my employer
  3071. -- or anyone at all for that matter.
  3072.  
  3073. A very bright programmer -- I'm wearing flourescent underware.
  3074.  
  3075. +++++++++++++++++++++++++++
  3076.  
  3077. >From ez006626@chumley.ucdavis.edu (David Clancy)
  3078. Date: 29 Jan 1995 11:23:39 GMT
  3079. Organization: University of California, Davis
  3080.  
  3081. Robert Mah (rmah@panix.com) wrote:
  3082.  
  3083. : Depends upon the application now, doesn't it?  For games, school
  3084. : projects, small business models, rand() and Random() are probably
  3085. : OK.  But if you're modeling air traffic control systems, nuclear
  3086. : power plants, etc. -- well, I think you'd better look into other
  3087. : algorithms.
  3088.  
  3089. : Cheers,
  3090. : Rob
  3091.  
  3092. And maybe other computers.  I've been modeling a nuclear power plant on my
  3093. LC for 3 years now...
  3094.  
  3095. --xav
  3096. Maybe I should give it the whole CPU, instead of letting the air traffic 
  3097. control system simulation share time...
  3098.  
  3099.  
  3100. ---------------------------
  3101.  
  3102. End of C.S.M.P. Digest
  3103. **********************
  3104.